sql >> データベース >  >> RDS >> Mysql

プリペアドステートメントのプレースホルダーがサブクエリにある場合の「フィールドリスト」の不明な列

    最近の編集で質問が非常に明確になったので、答えを試みます。この違いの原因はプレースホルダーです。

    文書化されているように、ここ 、プレースホルダーは、クエリ内の特定の場所でのみ使用できます。特に:

    SELECT ? as xとして 正常に準備されますが、SELECT nr.x FROM (SELECT ? AS x) AS nrではありません 。何故ですか?これは、PHPのドキュメントの匿名の作成者 によって最もよく説明されています。 、コピー/貼り付けさせてください:

    つまり、FROMのサブクエリでプレースホルダーを使用しているためです。 句、MySQLはクエリの実行プランを計算できません。

    つまり、クエリは常に変更されるため、そのために準備できる「テンプレート」はありません。

    したがって、本当にこのクエリを使用したい場合は、通常の(準備されていない)クエリを使用するか、PDOのエミュレートされた準備済みステートメントをオンに戻す必要があります。

    そうは言っても、コメントセクションで提供されているさまざまな代替案を検討してください。あなたが達成しようとしていることには、はるかに優れた解決策があります。




    1. アラビア語のテキストMySQLを挿入します

    2. MySQLデータベースで最大のテーブルを見つける方法は?

    3. FOREIGN KEYでテーブル(errno:150)を作成できません

    4. SQLとPrestoを使用したビッグデータ分析クエリの実行