2012-04-07 6 views
1

テーブルからすべてのレコードを選択し、それらのレコードすべてをループして、numtimespaidカラムが0に等しいレコードに到達するまでしたい。レコードを2に更新して終了します。ここに私は正しく働いていないものがあります:レコードをループし、レコードを1つ更新して終了する

$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

numtimespaid = 0の行が2つ以上ある場合でも、見つけた最初の1つだけを更新したいですか? – phpmeh

答えて

5

SELECTステートメントから行セットをループする必要はありません。最初の行をその値で単純に更新できます。このクエリは、numtimespaid = 0に一致するレコードを1つだけ更新します。その基準に一致するすべての行を更新する場合は、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

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

は、一般的にnumtimespaidは未定義の定数であると解釈されます。

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

次に、マイケルの答えが全体的に良くなっていることを認識してください。

+0

ありがとうございます。私もこれを試してみましょう。 – Charlie

関連する問題