2012-04-07 66 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