[PHP/MYSQL]Commands out of Sync

Commands out of Sync [PHP/MYSQL] - PHP - Programmation

Marsh Posté le 16-10-2011 à 13:49:45    

Bonjour,
 
J'ai le code php suivant (que j'ai simplifié pour vous exposer le problème)

Code :
  1. $sql = "UPDATE toto SET monchamp=1; UPDATE toto SET monchamp=2;";
  2. $gosql = mysqli_multi_query($connexion, $sql) or die('erreur de requete ' . $sql . ' - ' . mysqli_error($connexion));
  3. // Du code php dont va dépendre la seconde requête
  4. $alpha=1;
  5. $beta = 7;
  6. $sql = "UPDATE tata SET monchamp=$alpha; UPDATE tata SET monchamp=$beta;";
  7. $gosql = mysqli_multi_query($connexion, $sql) or die('erreur de requete ' . $sql . ' - ' . mysqli_error($connexion));


 
 
Le problème est que quand je fais ça, j'obtiens : erreur de requete UPDATE toto SET monchamp=1; UPDATE toto SET monchamp=7; - Commands out of sync; you can't run this command now
 
J'ai cru comprendre qu'il fallait utiliser mysqli_free_result, mais comme ici mon $gosql est un booléen, j'ai un warning et ca ne marche tout de même pas.
 
Comment résoudre le problème ?
 
Merci d'avance

Reply

Marsh Posté le 16-10-2011 à 13:49:45   

Reply

Marsh Posté le 16-10-2011 à 17:24:18    

J'ignore la raison de ton problème, mais je remarque deux choses :
- Tu n'as pas de condition WHERE dans ton update.
- Plutôt que de faire deux updates, tu devrais faire un update multiple
 
Les updates multiples sont de la forme :

Code :
  1. INSERT INTO `myTable` (`id`, `myField1`, `myField2`)
  2.            VALUES    (1,    'aa',        'aaa'),
  3.                      (2,    'bb',        'bbb'),
  4.                      (3,    'cc',        'ccc')
  5.            ON DUPLICATE KEY UPDATE `myField1`=VALUES(`myField1`),
  6.                                    `myField2`=VALUES(`myField2`)


 
http://dev.mysql.com/doc/refman/5. [...] icate.html
 
Du coup tu fais une seule requête au lieu de deux !


Message édité par CyberDenix le 16-10-2011 à 17:31:00

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 16-10-2011 à 17:48:44    

Salut

 

Merci pour ta requête, mais bon j'avais simplifié l'exemple à mort. Je ne peux pas faire un seul update (rajoutons des conditions si tu veux).
Là tu évites le problèmes en regroupant tout en une requête, mais dans le cas "réel" ce n'est pas possible. :)

 

Donc en gros, l'idée est de ne aps toucher aux requêtes, mais de permettre que ca se fasse ;) (parce que j'ai mis les requêtes les plus simples possibles pour reproduire le problème)


Message édité par nisalon_caje le 16-10-2011 à 18:07:53

---------------
http://nisalon.labrute.com/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed