繁体   English   中英

PHP MYSQL批次更新

[英]PHP MYSQL Batch update

有人可以告诉我为什么我不能执行这个简单的脚本。 我得到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 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运行正常。 请帮忙? 提前致谢。

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

您查询中的分号将被删除,并且LIMIT 1与第二个更新查询的开头发生冲突。

从PHP.net mysql_query手册页:mysql_query()向与指定的link_identifier关联的服务器上的当前活动数据库发送一个唯一查询(不支持多个查询)

您将需要使用两次对mysql_query的调用才能获得所需的结果。

您正在串联这两个$sql字符串,因此最终的$sql字符串将具有类似于以下内容的部分:

LIMIT 1update page SET

这是无效的SQL。 此外, mysql_query不支持多个查询(感谢zerkms),因此您必须分别执行每个查询。

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

如果1update page set …不是拼写错误,则这是导致错误的原因。 尝试找出那些人来自哪里。

如其他答案中所述,mysql_query()不支持多个查询,如果要将其优化为一个查询,则可能必须重新考虑查询的工作方式。

如果您愿意放弃限制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%'";

因为您在字符串上使用like作为最终条件,这可能会更新许多记录,所以我建议您重新设计以使用ID,以便可以对查询进行更好的限制,例如:

$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'";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM