选择行号的mysql更新

时间:2012-10-09 17:43:13

标签: mysql sql-update

我有下一个代码:

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());

GIVES ME ERROR:“”你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'UPDATE product_images AS t附近使用正确的语法(SELECT @rownum:= @ rownum + 1 rownum,product_images。*'at line 1“”

请帮助。谢谢。

2 个答案:

答案 0 :(得分:16)

这些是您尝试一次执行的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变量。

Simplified SQLFiddle example

答案 1 :(得分:1)

MySQL的PHP​​驱动程序不允许在单个query()调用中进行多个查询,作为针对某些形式的SQL注入攻击的安全措施。您必须将多个查询拆分为多个单独的query()调用。