Page 1 sur 1

DELETE et l'ordre d'éxecution de requêtes SQL

Posté : 29 mars 2010, 11:13
par Invité
Bonjour à tous,

Je suis confronté à un phénomène quelque peu bizarre depuis vendredi.
Je cherche à en comprendre la cause.

Dans un module d'administration j'effectue une action destinée à supprimer un élément de ma base de données.
Petit plus facultatif, j'aurai souhaité qu'un message de confirmation indique "L'élément xxx a bien été supprimé".
Pour afficher xxx, j'effectue donc dans un premier temps une requête SELECT classique pour récupérer les informations de l'élément destiné à être supprimer. Je stocke le nom de l'élément dans une variable $titre, puis j'effectue ma requête DELETE pour supprimer mon élément.

Mais à ma grande surprise, $titre est vide. Comme si mon DELETE passait avant mon SELECT.
J'ai tenté de tourner mon code de différentes manières sans jamais arriver à, à la fois afficher le titre de l'élément, et supprimer ce même élément ensuite.

Si quelqu'un a des infos sur l'ordre des requêtes SQL dans un fichier PHP pour essayer de m'éclairer sur ce phénomène que je ne m'explique pas.

Code : Tout sélectionner

if(isset($_GET['id']) && is_numeric($_GET['id'])){ //vérifie que je lui passe bien une id numérique en paramètre d'url $result = mysql_query("SELECT * FROM `actualites` WHERE id='".$_GET['id']."'"); $row_affiche = mysql_fetch_array($result_affiche); $titre = $row_affiche['titre']; //sensé stocker le titre de l'élément à supprimer echo $titre; //sans exécuter le DELETE ci-dessous, il m'affiche bien le titre. Dès que le DELETE est actif, alors $titre retourne une chaîne vide. } $result_suppr = mysql_query("DELETE FROM `actualites` WHERE id='".$_GET['id']."'"); if ($result_suppr){ echo "L'élément '".$titre."' a bien été supprimé."; //Même constat que plus haut : sans exécuter le DELETE ci-dessus, il m'affiche bien le titre. Dès que le DELETE est actif, alors $titre retourne une chaîne vide. }else{ echo "Problème."; }
Pour info, je n'ai pas testé en ligne, je suis encore en local avec EasyPHP, est-ce que cela aurait une conséquence ? Je ne pense pas.

Merci d'avoir pris le temps de lire mon problème et merci pour votre contribution.

Pixéo.

Re: DELETE et l'ordre d'éxecution de requêtes SQL

Posté : 29 mars 2010, 15:41
par Genova
   $result = mysql_query("SELECT * FROM `actualites` WHERE id='".$_GET['id']."'");
   $row_affiche = mysql_fetch_array($result_affiche);
Tu te trompes de variable ($result à la première ligne, $result_affiche à la seconde).

Re: DELETE et l'ordre d'éxecution de requêtes SQL

Posté : 29 mars 2010, 16:11
par Invité
En effet, Genova.
C'est une erreur de ma part au moment de simplifier mon code pour le poster ici.
Mais le problème ne vient pas de là.

Considérez que le code est bien :
   
$result_affiche = mysql_query("SELECT * FROM `actualites` WHERE id='".$_GET['id']."'");
$row_affiche = mysql_fetch_array($result_affiche);
Si je mets ma requête DELETE en commentaire, le titre s'affiche bien.
Dès que le DELETE est effectif, le titre ne s'affiche pas.

Re: DELETE et l'ordre d'éxecution de requêtes SQL

Posté : 29 mars 2010, 16:34
par macgawel
PHP est un langage séquentiel.
Ca veut dire que les instructions sont traitées ligne à ligne.
Ca veut dire que normalement ton script fait le SELECT, récupère $titre, puis fais le DELETE.

Ca veut dire qu'il y a un bug :mrgreen:

=> Le temps du débuggage :
- Faire des echo de tes requêtes, pour les tester sous phpMyAdmin
- rajouter un or die ("Erreur lors de tel traitement SQL : ".mysql_error()); à la fin de chaque fonction mysql.
- Dans ton echo pour confirmer la suppression, rajoute le nombre de lignes affectées : mysql_affected_rows().