PDO fetch提供一般错误子查询

时间:2013-01-29 15:36:36

标签: php mysql database pdo

我有一个带有子查询的查询,以根据tune_value获取每行的排名。如果我尝试获取结果,我将从PDOStatement :: fetchAll();中得到一般错误。准备语句的exectute似乎没有任何错误。

我有以下查询

SET @rank := 0;
SELECT * FROM 
(
  SELECT *,
         (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(tunes.creation_date)) as age,
         @rank := @rank + 1 as rank
  FROM tunes
  ORDER BY tune_value DESC
) as t
LEFT JOIN artists ON artists.id = t.artists_id
ORDER BY age

我使用以下简化的PHP代码准备语句。

   $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
   $stmt = $pdo->prepare($sql);
   $stmt->execute();
   $stmt->fetchAll(\PDO::FETCH_ASSOC);

用php做这个子查询是不可能的吗?我在考虑可能会查看子查询。

编辑:澄清查询在phpmyadmin

中正常工作

1 个答案:

答案 0 :(得分:2)

PDO在一次通话中不支持多个查询 (意味着PDO支持子查询,它只是不支持由分号分隔的多个查询
你必须逐个打电话给他们 要从PDO获取错误,请设置此属性

$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

编辑:这意味着SET @rank := 0;是一个单独的查询,应该在单独的调用中查询