1

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

我有以下查询

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 中工作正常

4

1 回答 1

2

PDO 不支持一次调用中的多个查询。
(意思是PDO支持子查询没问题,只是不支持用分号分隔的多个查询
你必须一一调用。
要从 PDO 获取错误,请设置此属性

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

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

于 2013-01-29T15:43:02.673 回答