2011-09-15 30 views
1

この単純なスクリプトを実行できない理由を教えてもらえますか?私が得るエラーはYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1update page SET RegionId = 1 WHERE (RegionId = -1 or RegionId = -3) and Descri' at line 1です。この文をMySQLPHPAdminにコピーすると正常に動作します。助けてください?前もって感謝します。PHP MYSQLバッチ更新

$sql = "update page SET RegionId = 2 WHERE (RegionId = -1 or RegionId = -3) and Description like '%Saskatoon%' LIMIT 1"; 
$sql = $sql . "update page SET RegionId = 1 WHERE (RegionId = -1 or RegionId = -3) and Description like '%Regina%' LIMIT 1"; 

echo $sql; 

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

この正確なコードは** **スローなエラー – zerkms

答えて

0

1update page set …はタイプミスではない場合、これはエラーの原因です。それらがどこから来ているのか調べてみてください。

3

あなたはこれら2つの$sql文字列を連結しているので、最終的$sql文字列は次のようになります一部あります:無効なSQLをある

LIMIT 1update page SET 

を。さらに、mysql_queryは複数のクエリ(感謝の感嘆符)をサポートしていないので、それぞれを個別に実行する必要があります。

$sql = "UPDATE page SET RegionId = 2 WHERE (RegionId = -1 OR RegionId = -3) AND Description LIKE '%Saskatoon%' LIMIT 1" 
mysql_query($sql) or die(mysql_error()); 
$sql = "UPDATE page SET RegionId = 1 WHERE (RegionId = -1 OR RegionId = -3) AND Description LIKE '%Regina%' LIMIT 1"; 
mysql_query($sql) or die(mysql_error()); 
+1

が 'するmysql_query()'文字列内のいくつかのクエリをサポートしていないことができません:あなたはより良い制約を使用してクエリを設計できるよう、たとえば、IDを使用する-designing – zerkms

+0

OK、あなたはそれを発見しました「mysql_query()は一意のクエリを送信します(複数のクエリはサポートされていません)」http://php.net/manual/en/function.mysql-query.phpしたがって、後で両方のクエリを送信する必要があります別の... – feeela

+0

かなり、愚かな私。更新しました。 – Alex

6

クエリのセミコロンが削除されており、LIMIT 1が2番目の更新クエリの先頭と衝突しています。

PHP.netのmysql_queryマニュアルページから:mysql_query()は、指定されたlink_identifierに関連付けられているサーバ上の現在アクティブなデータベースに、ユニークなクエリ(複数のクエリはサポートされていません)を送信します。

目的の結果を得るには、mysql_queryを2回呼び出す必要があります。

0

mysql_query()は複数のクエリをサポートしていないので、これを1つのクエリに最適化したい場合は、クエリの仕組みを再考する必要があります。

あなたはそれをこのように行うことができます制限1制限あきらめて喜んでいる場合:あなたは、これは多くのレコードを更新することができ、最終的な条件として、文字列の上にのように使用しているため

$sql = "update page 
    SET RegionId = 2 WHERE (RegionId = -1 or RegionId = -3) and Description like '%Saskatoon%', 
    SET RegionId = 1 WHERE (RegionId = -1 or RegionId = -3) and Description like '%Regina%'"; 

を、私は再示唆しています

$sql = "update page 
    SET RegionId = 2 WHERE (`RegionId` = -1 or `RegionId` = -3) and `user` = '1', 
    SET RegionId = 1 WHERE (`RegionId` = -1 or `RegionId` = -3) and `user` = '2'";