循环遍历记录,更新一条记录,并退出
我想从我的表中选择所有记录,并遍历所有这些记录,直到我得到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;
}
}
任何想法,我做错了什么和/或正确的方式做到这一点?
没有必要循环从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
}
感谢您的回复。我实际上想让它numtimespaid == 0或1.我会试试这个。再次感谢。 – Charlie 2012-04-07 13:31:23
if ($row[numtimespaid] == 0) {
通常被解释为numtimespaid是一个未定义的常量。把它引用它,像这样:
if ($row['numtimespaid'] == 0) {
然后,认识到迈克尔的答案只是更好的整体。
谢谢你,我也会试试这个。 – Charlie 2012-04-07 13:31:49
所以,即使有超过1行的numtimespaid = 0,你想只更新第一个你找到的? – phpmeh 2012-04-07 00:44:25