2011-01-25 10 views
0

私は360行を更新する必要があります。明らかに、これは正しく動作しません。すべてのヘルプは、少なくとも一つありますmysqlは複数の行をforループで更新するためにCASEを使用します

for ($i = 1; $i <= 360; $i++) { 

    $info = mysql_real_escape_string($_POST[$i]); 
    $check = mysql_real_escape_string($_POST[''.$i.'Check']); 

     $case = "WHEN '$i' THEN '$info'"; 
} 

    $sql = "UPDATE $table 
      SET info = CASE id 
       $case 
      END 
      WHERE ID in (1-360)"; 

    mysql_query($sql) 
     or die (mysql_error()); 
+0

1. "does not work"は説明ではありません。2. PHPを使わないで、プレーンなSQLクエリを与えます。 – zerkms

答えて

1

してください(あまり?)これが動作しない理由は明白な理由 - あなたはループの反復ごとに$ケースの内容を置き換えます。 $case .= "WHEN '$i' THEN '$info'\n";(等号の前の点に注意してください。もう1つはおそらく、$ iがクエリ内で単一引用符で囲まれ、ID列が数字である傾向があるということです。

私はあなたのコードを試してみませんでした。それでも "うまくいかない"場合は、質問を編集して、テーブル構造やエラーメッセージなどの情報を追加する必要があります。

それとは別に、あなたが行うことができます。サーバーに対してステートメントのバッチを実行する

$sql = "UPDATE $table SET\n"; 
for ($i = 1; $i <= 360; $i++) { 

    $info = mysql_real_escape_string($_POST[$i]); 
    //$check = mysql_real_escape_string($_POST[''.$i.'Check']); 
    // What's that $check for? 

    $sql .= "info = '$info' where ID = $i\n"; 
} 

mysql_query($sql) 
    or die (mysql_error()); 

は珍しいことではありません、さらには360ラインCASE構文に一致する値を検索するよりも優れた性能が得られるかもしれません。

関連する問題