2010-03-31 8 views
0

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?

Répondre

1
  1. Ajouter clause ORDER BY
  2. vous réécrivez toujours avec les mêmes données. Vous devez spécifier WHERE avec la ligne pour mettre à jour une autre ligne
+0

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

+0

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

+0

même si c'est le travail pour vous maintenant - je conseille de toujours spécifier ORDER pour obtenir des résultats évidents. – zerkms