2012-04-07 108 views
1

我想从我的表中选择所有记录,并遍历所有这些记录,直到我得到numtimespaid列等于0的记录。一旦找到我想要的列将其更新为2,然后退出。这是我有什么不能正常工作:循环遍历记录,更新一条记录,并退出

$query1 = "SELECT * FROM ".$line." ORDER BY datestamp, timestamp"; 
$result1 = mysql_query($query1) or die(mysql_error()); 
while($row = mysql_fetch_array($result1)){ 
    if ($row[numtimespaid] == 0) { 
     $queryupdate="UPDATE ".$line." SET numtimespaid=1"; 
     $resultu=mysql_query($queryupdate); 
     break; 
     } 
    } 

任何想法,我做错了什么和/或正确的方式做到这一点?

+1

所以,即使有超过1行的numtimespaid = 0,你想只更新第一个你找到的? – phpmeh 2012-04-07 00:44:25

回答

5

没有必要循环从SELECT声明的行集。您可以简单地用该值更新第一行。该查询将更新恰好一个匹配numtimespaid = 0的记录。如果您想更新符合该标准的所有行,只需删除LIMIT 1即可。

$result = mysql_query("UPDATE $line SET numtimespaid=1 WHERE numtimespaid = 0 ORDER BY datestamp, timestamp LIMIT 1"); 

顺便说一句,我们不知道是什么的$line的内容,但希望你正确地筛选出的值,如果它来自用户的输入。如果它来自用户的输入,建议反对可能的表名白名单,检查它的价值:

// $line can be one of table1,table2,table3 
if (!in_array($line, array('table1','table2','table3')) { 
    // FAIL, don't execute the query 
} 
+0

感谢您的回复。我实际上想让它numtimespaid == 0或1.我会试试这个。再次感谢。 – Charlie 2012-04-07 13:31:23

0
if ($row[numtimespaid] == 0) { 

通常被解释为numtimespaid是一个未定义的常量。把它引用它,像这样:

if ($row['numtimespaid'] == 0) { 

然后,认识到迈克尔的答案只是更好的整体。

+0

谢谢你,我也会试试这个。 – Charlie 2012-04-07 13:31:49