1

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で正常に動作します

4

1 に答える 1

2

PDOは、1回の呼び出しで複数のクエリをサポートしていません。
(つまり、PDOはサブクエリをサポートしますが、セミコロンで区切られた複数のクエリはサポートしていません
それらを1つずつ呼び出す必要があります。
また、PDOからエラーを取得するには、この属性を設定します

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

編集:これは、SET @rank := 0;が別のクエリであり、別の呼び出しでクエリする必要があることを意味します

于 2013-01-29T15:43:02.673 に答える