0

当我在我的 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 服务器版本相对应的手册,以在第 1 行的 'AND d.keyParam='G002' AND r.EventKey = 'G002' ORDER BY h.timestamp DESC LIMIT 1' 附近使用正确的语法

有谁知道出了什么问题?

4

3 回答 3

4

我的猜测:$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;
于 2013-10-01T12:05:48.197 回答
0

如下更新您的查询,即使序列号为空,它也会起作用

$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";
于 2013-10-01T12:14:42.317 回答
0

改变

AND h.serialNumber=$serialnumber 

进入

AND h.serialNumber='$serialnumber' 

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

于 2013-10-01T12:20:45.060 回答