【问题标题】:PDO fetch gives general error subqueryPDO fetch 给出一般错误子查询
【发布时间】:2013-01-29 15:36:35
【问题描述】:

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

我有以下问题

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

【问题讨论】:

  • 尝试将你的表名添加到artist_id,所以t.artist_id。我也相信你真的不能在子查询中订购。可能想检查一下。

标签: php mysql database pdo


【解决方案1】:

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

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

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

【讨论】:

  • 我仍然有标记,但它提供的信息并不比一般错误更多。如果 PDO 不支持,您会建议从子查询中创建视图吗?
猜你喜欢
  • 2011-12-27
  • 1970-01-01
  • 2015-10-05
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
相关资源
最近更新 更多