SQL查询返回空结果

时间:2013-04-19 15:22:10

标签: php mysql pdo mysqli html5builder

我有这个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。 Ma最后一段代码如下:

$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服务器版本,以便使用正确的语法   'SELECT hinfo.idx,hinfo.host_idx,hinfo.processor_load附近,   hinfo.memory_total,'第2行

在数据库客户端中执行的相同查询工作正常(它不是一个慢查询,执行它需要不到10毫秒)。 此外,当我尝试直接从网页上的这个函数打印查询并将其粘贴到mysql客户端 - 它也完美地工作!我在十六进制查看器中找不到任何特殊字符,我试图强制使用utf-encoding。

有什么想法吗?测试我可以执行?提前谢谢!

2 个答案:

答案 0 :(得分:2)

尝试将其作为两个单独的语句执行。从GUI工具或命令行工具运行查询与在代码中嵌入查询不同。所以它适用于数据库工具,但不适用于PHP代码。

答案 1 :(得分:1)

PHP的mysql适配器一次只能处理一个查询。您确实应该将查询彼此分开运行。

“@ date_shift”将在第二个查询中可用,假设您在两个查询之间没有销毁到mysql的连接。