最近の編集で質問が非常に明確になったので、答えを試みます。この違いの原因はプレースホルダーです。
文書化されているように、ここ 、プレースホルダーは、クエリ内の特定の場所でのみ使用できます。特に:
SELECT ? as x
として 正常に準備されますが、SELECT nr.x FROM (SELECT ? AS x) AS nr
ではありません 。何故ですか?これは、PHPのドキュメントの匿名の作成者
によって最もよく説明されています。 、コピー/貼り付けさせてください:
つまり、FROM
のサブクエリでプレースホルダーを使用しているためです。 句、MySQLはクエリの実行プランを計算できません。
つまり、クエリは常に変更されるため、そのために準備できる「テンプレート」はありません。
したがって、本当にこのクエリを使用したい場合は、通常の(準備されていない)クエリを使用するか、PDOのエミュレートされた準備済みステートメントをオンに戻す必要があります。
そうは言っても、コメントセクションで提供されているさまざまな代替案を検討してください。あなたが達成しようとしていることには、はるかに優れた解決策があります。