Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/05/2011, 22h29   #1
Membre à l'essai
 
Homme
Inscription : janvier 2009
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2009
Messages : 36
Points : 21
Points : 21
Par défaut Interrompre une requête sql trop longue

Bonjour à tous.
Je suis en train de réaliser un outil en php mysql.
Je suis face au problème suivant :

j'ai un appel d'une page PHP (appel effectué via AJAX en asynchrone) qui effectue un très longue requête (plus d'une minute). J'aimerais que si l'utilisateur le souhaite, il puisse interrompre l'exécution de cette requête via un autre appel Ajax. Pour l'instant la solution implémentée est la suivante
(en pseudo code

* Appel du premier script php via AJAX. Le script effectue:
- SELECT connection_id() AS connection_id
- enregistrement de connection_id dans la SESSION
- grosse requête qui prend longtemps

* Instant donné, l'utilisateur clique sur un bouton qui lance un appel via AJAX du deuxième script. Le script effectue
- récupération de la variable $connection_id dans la session
- KILL QUERY $connection_id

Le problème est que le deuxième script attends toujours la fin du premier script pour être exécuté. J'ai inséré des instructions de reporting (error_log) et me suis aperçu que tant que le premier script n'a pas terminé sa requête, alors le deuxième script ne s'exécute pas. J'aimerais savoir comment puis-je régler ce problème (peut-être ma solution n'est pas la bonne)

Une chose cepandant: lorsque j'interromps ma requête à l'aide d'un outil client sql (donc sans passer par un script php) alors la pas de soucis...

Merci de votre lecture

Guillaume
kayoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 00h07   #2
Membre à l'essai
 
Homme
Inscription : janvier 2009
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2009
Messages : 36
Points : 21
Points : 21
Par défaut Résolu

Bon en fait un mec m'a donné une info hyper interéssante : une session sur php est verrouillée. Donc dans mon cas le blocage était pas au niveau de la base de données ou même de AJAX, comme j'avais pu le penser au début. Non le problème venait juste de l'accès à la variable $_SESSION qui était verrouillée par le premier script.
kayoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 00h10   #3
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
tu as une réponse de se coté :
http://mysql.ifrance.com/showthread.php?t=60
tu récupère l'id de la grosse requete, et si tu veux annuler la requete tu ouvre une nouvelle connexion à partir d'un lien ou un bouton et tu 'KILL' la grosse requete dont tu as récupérer l'id...
jamais essayé mais tiens moi au courant du résultat...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 13h09   #4
Membre à l'essai
 
Homme
Inscription : janvier 2009
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2009
Messages : 36
Points : 21
Points : 21
Citation:
Envoyé par vorace Voir le message
tu as une réponse de se coté :
http://mysql.ifrance.com/showthread.php?t=60
tu récupère l'id de la grosse requete, et si tu veux annuler la requete tu ouvre une nouvelle connexion à partir d'un lien ou un bouton et tu 'KILL' la grosse requete dont tu as récupérer l'id...
jamais essayé mais tiens moi au courant du résultat...
Samut Vorace, à mon avis tu n'as pas du bien lire mon thread ... parce que c'est exactement ce que j'explique.

Donc OUI cela fonctionne parfaitement. Le problème que j'ai eu c'est une histoire de blocage de session PHP.

En effet, j'utilise la session pour placer le premier identifiant de requête (la requête longue).

Ensuite le deuxième appel va lire dans la session pour connaitre cet identifiant et lancer le KILL. Sauf que : la session est toujours verrouillée par le premier thread php.

Il faut juste ajouter un "session_write_close()" dans le premier thread dès que possible pour que la session soit libéré et accessible par le second appel php.

En espérant avoir été clair

Guillaume.
kayoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 14h00   #5
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
autant pour moi...
c'est bon à savoir
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h09.


 
 
 
 
Partenaires

Hébergement Web