MySQL查询在命令行中运行良好,但在php中运行时会出现错误


MySQL query runs fine in command line, but gives error when ran in php

我有一个查询,当我在linux服务器命令行上运行它时,它工作正常,但是当我尝试通过php执行i时,它会抛出php错误。

SELECT h.timestamp, d.valueparam, r.label, r.dataUnit 
FROM EventData d, EventHeader h, EventKeyReference r 
WHERE h.id = d.eventHeader_id AND h.serialNumber=$serialnumber 
AND d.keyParam='G002' AND r.EventKey = 'G002' 
ORDER BY h.timestamp DESC LIMIT 1;

它给了我这个错误:

您的 SQL 语法有误; 检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近 'AND d.keyParam='G002' 和 r.EventKey = 'G002' 排序方式 h.时间戳 第 1 行的 DESC 限制 1'

有谁知道出了什么问题?

我的猜测:$serialnumber为空,您的查询是:

SELECT h.timestamp, d.valueparam, r.label, r.dataUnit 
FROM EventData d, EventHeader h, EventKeyReference r 
WHERE h.id = d.eventHeader_id AND h.serialNumber=
                                               // ^-- error here
AND d.keyParam='G002' AND r.EventKey = 'G002' 
ORDER BY h.timestamp DESC LIMIT 1;

按如下方式更新您的查询,即使序列号为空也可以

$sql = "SELECT h.timestamp, d.valueparam, r.label, r.dataUnit 
FROM EventData d, EventHeader h, EventKeyReference r 
WHERE h.id = d.eventHeader_id AND h.serialNumber='".$serialnumber."'
AND d.keyParam='G002' AND r.EventKey = 'G002' 
ORDER BY h.timestamp DESC LIMIT 1";

更改

AND h.serialNumber=$serialnumber 

AND h.serialNumber='$serialnumber' 

这将捕获任何带有字母的空$serialnumber或$serialnumber。