相同的查询工作方式不同


Same query works different

我制作了更新数据库的php脚本:

<?php
include 'config.php';
$PauseID = "2";
$ProductionID = "1411979966";
$sql = "SET @max = (SELECT MAX(Id) FROM tblproductionbreaks); UPDATE tblproductionbreaks SET IDPause = '$PauseID' WHERE ProductionID = '$ProductionID' AND Id = @max;";     
mysql_query($sql) or die(mysql_error());
mysql_close($connect);
?>

执行此脚本时返回错误:

您的SQL语法有错误;查看手册与您的MySQL服务器版本相对应,以便使用正确的语法接近"UPDATE tblproductionbreaks SET IDPause="2"WHERE ProductionID=第1行处的'1411979966'A'

但若我尝试通过命令行执行相同的更新查询,它会起的作用

SET @max = (SELECT MAX(Id) FROM tblproductionbreaks); UPDATE tblproductionbreaks SET IDPause = '2' WHERE ProductionID = '1411979966' AND Id = @max;

我不明白同一件事的运作方式有何不同。

使用PHP不能将多个查询作为一条语句运行。尝试如下:

$sql = "UPDATE tblproductionbreaks SET IDPause = '$PauseID' WHERE ProductionID = '$ProductionID' ORDER BY Id DESC LIMIT 1;";     

无论如何,您都不需要这个变量。

这是因为PHP解释器将$sql视为字符串。将代码更改为

$sql = "UPDATE tblproductionbreaks SET IDPause = '{$PauseID}' WHERE ProductionID = '{$ProductionID}' AND Id = (SELECT MAX(Id) FROM tblproductionbreaks)";

您还可以通过echo $sql对其进行调试,并查看$sql实际返回的是什么