php - 使用 PHP 在一个 SQL 查询中执行多个更新

标签 php mysql sql-update

所以我看了HERE ,但对于我正在做的事情的简单性来说,这似乎有点令人费解。我最多要处理一百个要更新的项目(大多数时候它会更像是 40 个)

目前我有这样的东西

$sql_update = '';
for($x = 0; $x < count($nodes); $x++){
  if($nodes[$x]['loaded'] == 'true'){
    if($nodes[$x]['changed'] == 'true'){
        $sql_update .= 'UPDATE `genetic_decomp`.`tbl_node2view` SET `x` = "'.$nodes[$x]['location']['x'].'", `y` = "'.$nodes[$x]['location']['y'].'" WHERE `tbl_node2view`.`id` = "'.$nodes[$x]['id'].'";'; 
        $sql_update .= 'UPDATE `genetic_decomp`.`tbl_nodes` SET `name` = "'.$nodes[$x]['name'].'", `type` = "'.$nodes[$x]['type'].'" WHERE `tbl_nodes`.`node_id` = "'.$nodes[$x]['id'].'";';
    }
  }
}
if($sql_update != ''){
    $sql_result=mysql_query($sql_update,$connection) or exit("Sql Error".mysql_error());
}

现在,当我让它在 echo $sql_update 中打印出输出,然后将输出粘贴到 MAMP 中的 SQL 框中时,它工作正常..遍历并更新我想要两张 table

然而,当我运行上面的代码时,它会返回:

Sql 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 `genetic_decomp`.`tbl_nodes` SET `name` = "lala", `type` = "p" WHERE `tbl' at line 1

我做错了什么? 有更好的方法吗?

最佳答案

您的 SQL 在语法上看起来是正确的(除非我漏掉了一些简单的东西)。实际问题是因为您使用的是 mysql_query() - 支持多语句;因此,您不能使用此方法同时运行两个 UPDATE 查询。

来自手册:

mysql_query() sends a unique query (multiple queries are not supported)

同样,mysql_ 方法已被弃用,因此我(和社区)建议您更新代码以使用 mysqli_PDO方法 - 这两种方法都支持在单个语句中进行多个查询。

如果您需要坚持使用 mysql_query()(而不是重构整个应用程序),只需拆分查询并连续运行它们即可。

关于php - 使用 PHP 在一个 SQL 查询中执行多个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830956/

相关文章:

javascript - 解码 JavaScript 编码的内容

mysql - 连接表并返回每条记录的匹配总数

php - 更新 while 循环中的所有行

php - WordPress 如何检查查询是否有帖子

javascript - 当我们在laravel中使用XMLHttpRequest时,如何在 Controller 中接收表单数据

php - 限制 mysql 查询的多个结果

php - 消息系统,显示对话列表

php - 使用PHP设置mysql参数

mysql - 更新多个字段值的单个 SQL 查询

sql - 如何使用第三个表中的 ID 更新第二个表内容中的 MSSQL 表值以匹配记录?