あなたの質問に対する簡単な答えは「いいえ」です。
厳密な意味では、データベースレベルでは、プリペアドステートメントでは、SQLステートメントの「値」ビットにのみパラメーターをバインドできます。
これについての考え方の1つは、「ステートメントの実行時に、その意味を変更せずに置き換えることができるもの」です。テーブル名は、SQLステートメント自体の有効性(つまり、有効な列名)を決定し、実行時に変更するとSQLステートメントが有効かどうかが変わる可能性があるため、これらのランタイム値の1つではありません。
少し高いレベルでは、PDOなどのデータベースにプリペアドステートメントを実際に送信するのではなく、プリペアドステートメントのパラメータ置換をエミュレートするデータベースインターフェイスでも、プレースホルダーをどこでも使用できる可能性があります(プレースホルダーはに送信される前に置き換えられるため)これらのシステムのデータベース)の場合、テーブルプレースホルダーの値は文字列になり、データベースに送信されるSQL内にそのように囲まれるため、SELECT * FROM ?
mytable
を使用 パラメータは実際にはSELECT * FROM 'mytable'
を送信することになります。 無効なSQLであるデータベースへ。
最善の策は、続行することです
SELECT * FROM {$mytable}
しかし、あなたは絶対に $mytable
の場合、最初にチェックするテーブルのホワイトリストが必要です。 ユーザー入力から来ています。