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;
        }
    }

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

4

2 回答 2

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
}
于 2012-04-07T00:43:42.300 回答
0
if ($row[numtimespaid] == 0) {

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

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

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

于 2012-04-07T00:57:47.857 回答