我想从我的表中选择所有记录并循环遍历所有这些记录,直到我到达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;
}
}
关于我做错了什么和/或正确的做法的任何想法?
答案 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) {
然后,意识到迈克尔的答案总体上会更好。