6

次のコードがあります:

SET @rownum=0;
UPDATE product_images AS t, (SELECT @rownum:=@rownum+1 rownum, id, rel 
FROM product_images WHERE product_id='227') AS r
SET t.rel = r.rownum
WHERE t.id = r.id

これはphpmyadminでうまく機能しています

しかし...次のコード(魔女は実際には同じです)が、phpコードに配置されています

mysql_query ("
SET @rownum=0; 
UPDATE product_images AS t, 
(SELECT @rownum:=@rownum+1 rownum, product_images.* 
FROM product_images WHERE product_id='$pid') AS r
SET t.rel = r.rownum WHERE t.id = r.id ") or die(mysql_error());

私にエラーを与えます:"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 'UPDATE product_images AS t, (SELECT @rownum:=@rownum+1 rownum, product_images.* ' at line 1"

助けてください。ありがとうございました。

4

2 に答える 2

21

これらは、一度に実行しようとする 2 つのクエリです。mysql_queryこれはPHP メソッドでは機能しません。

実際には、最初のステートメントは必要ありません。試す

UPDATE product_images AS t
JOIN
(
    SELECT @rownum:=@rownum+1 rownum, id, rel
    FROM product_images
    CROSS JOIN (select @rownum := 0) rn
    WHERE product_id='227'
) AS r ON t.id = r.id
SET t.rel = r.rownum

@rownumその場で変数を初期化します。

簡略化された SQLFiddle の例

于 2012-10-09T17:44:30.010 に答える
1

MySQL の PHP ドライバーは、SQL インジェクション攻撃のいくつかの形式に対するセキュリティ対策として、単一の query() 呼び出しで複数のクエリを許可していません。マルチクエリを複数の個々の query() 呼び出しに分割する必要があります。

于 2012-10-09T17:45:20.180 に答える