ホームページ >バックエンド開発 >PHPチュートリアル >準備されたステートメントは SQL の動的テーブル名を使用できますか?
プリペアド ステートメントは動的テーブル名を処理できますか?
テーブル名にプレースホルダーを使用して MySQL プリペアド ステートメントを実行しようとしました。 、これはサポートされている機能ではありません。準備されたステートメントは、テーブル名などの構造要素ではなく、SQL ステートメントの「値」セクションにパラメーターをバインドするように設計されています。
データベース レベルでは、テーブル名を変更するとステートメントの有効性が変わる可能性がありますが、これはプリコンパイルの範囲を超えています。プレースホルダーをどこでも使用できるデータベース インターフェイスでも、プレースホルダーの値は文字列に変換されるため、 SELECT * FROM ? は実際には無効な SQL (つまり、 `SELECT * FROM 'mytable' ' ) を送信します。
このインジェクションを回避するためのベスト プラクティスは、ホワイトリスト チェックを使用することです。クエリを作成する前に、入力したテーブル名が事前承認リストに含まれていることを確認してください。これにより、安全なテーブル名のみが使用されるようになり、SQL インジェクションのリスクが軽減されます。
以上が準備されたステートメントは SQL の動的テーブル名を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。