我有这个 SQL 查询:
SET @date_shift = DATE_SUB(NOW(), Interval 60 MINUTE);
SELECT hinfo.idx,
hinfo.host_idx,
hinfo.processor_load,
hinfo.memory_total,
hinfo.memory_free,
hnames.idx,
hnames.name,
disks.hostinfo_idx,
disks.id,
disks.name,
disks.size,
disks.freespace,
hinfo.probetime
FROM systeminfo.hostinfo AS hinfo
INNER JOIN systeminfo.hosts AS hnames
ON hnames.idx = hinfo.host_idx
INNER JOIN systeminfo.disksinfo AS disks
ON disks.hostinfo_idx = hinfo.idx
WHERE hinfo.probetime > @date_shift AND
hinfo.probetime = (SELECT MAX(probetime) FROM systeminfo.hostinfo AS hi
WHERE hi.probetime > @date_shift AND hi.host_idx = hinfo.host_idx)
GROUP BY disks.id,
hnames.name
ORDER BY hnames.name,
disks.id;
我尝试在 php 代码中执行它。我试过 mysql、mysqli 和 pdo。马最后的代码如下:
$db = new PDO("mysql:host=".$this->ip.";dbname=".$this->dbname.";charset=utf8", $this->username, $this->password);
$result = $db->query($query);
$fetch_data = $result->fetchAll(PDO::FETCH_ASSOC);
或者
mysql_connect($this->ip, $this->username, $this->password);
mysql_query('SET NAMES utf8;');
mysql_select_db($this->dbname);
$result = mysql_query($query);
PHP 正确连接到数据库。简单的查询,例如 select * from tablename 有效。但是此查询返回 NO 数据但错误:
1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'SELECT hinfo.idx, hinfo.host_idx, hinfo.processor_load, hinfo.memory_total, ' 附近使用正确的语法
在数据库客户端中执行的相同查询可以完美运行(这不是一个慢查询,执行它需要不到 10 毫秒)。此外,当我尝试直接从网页上的此功能打印查询并将其粘贴到 mysql 客户端时 - 它也可以完美运行!我在尝试强制 utf 编码的十六进制查看器中找不到任何特殊字符,什么也没有。
有任何想法吗?我可以执行的测试?提前致谢!