J'ai une table basée sur le tas dans MySQL que j'essaie de mettre à jour via PHP, mais pour une raison quelconque, les mises à jour ne semblent pas avoir lieu.PHP MySQL Bizarre Mise à jour Problème
Voici mon code de test:
<?php
$freepoints[] = 1;
$freepoints[] = 2;
$freepoints[] = 3;
foreach ($freepoints as $entrypoint) {
$query = "update gates set lane='{$entrypoint}' where traffic > 50 limit 50";
echo "$query\n";
mysql_query($query);
echo mysql_affected_rows()."\n";
}
?>
Ce produit les éléments suivants:
update gates set lane='1' where traffic > 50 limit 50
50
update gates set lane='2' where traffic > 50 limit 50
50
update gates set lane='3' where traffic > 50 limit 50
50
Dans la base de données pour commencer avec des voies 1/2/3 0 avaient des dossiers et des voies 4/5/6 avait 100 enregistrements. À partir de là, je m'attends à ce que les 6 voies aient maintenant 50 enregistrements chacune. Cependant quand je regarde les voies 4/5/6 ont toujours 100 enregistrements et 1/2/3 ont toujours 0 enregistrements. Lorsque je copie la requête "update gates set lane = '1" où traffic> 50 limite 50 "dans phpMyAdmin cela fonctionne très bien, donc aucune idée pourquoi ça ne marche pas dans mon script PHP quand mysql_affected_rows le dit a mis à jour 50 enregistrements?
J'ai changé la requête à la suivante mais ne fonctionne toujours pas: mettre à jour les portes set lane = '{$ entrypoint}' où traffic> 50 et lane! = '{ $ entrypoint} 'ordre par limite de voie 50 – Tim
Oh maintenant je me sens si idiot quand je réalise le problème que vous dites. J'ai changé la requête comme suit et ça marche bien maintenant: "mettre à jour les portes set lane = '{$ entrypoint}' où traffic> 50 et lane> '{$ entrypoint}' limite 50". Je vous remercie! – Tim
même si c'est le travail pour vous maintenant - je conseille de toujours spécifier ORDER pour obtenir des résultats évidents. – zerkms