我有一个带有子查询的查询,以根据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
中正常工作答案 0 :(得分:2)
PDO在一次通话中不支持多个查询
(意味着PDO支持子查询,它只是不支持由分号分隔的多个查询)
你必须逐个打电话给他们
要从PDO获取错误,请设置此属性
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
编辑:这意味着SET @rank := 0;
是一个单独的查询,应该在单独的调用中查询