[MySQL在选择的行号上更新

问题描述 投票:3回答:2

我有下一个代码:

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"

请帮助。谢谢。

mysql sql-update
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.