循环记录,更新一个记录,然后退出

时间:2012-04-07 00:41:13

标签: php mysql

我想从我的表中选择所有记录并循环遍历所有这些记录,直到我到达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;
        }
    }

关于我做错了什么和/或正确的做法的任何想法?

2 个答案:

答案 0 :(得分:5)

没有必要从SELECT语句循环遍历rowset。您只需使用该值更新第一行即可。此查询将更新一个匹配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
}

答案 1 :(得分:0)

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

通常被解释为numtimespaid是一个未定义的常量。在它周围加上引号,如下:

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

然后,意识到迈克尔的答案总体上会更好。