ホームページ >バックエンド開発 >PHPチュートリアル >PHP PDO プリペアド ステートメントではテーブル名または列名のパラメータを使用できますか?

PHP PDO プリペアド ステートメントではテーブル名または列名のパラメータを使用できますか?

DDD
DDDオリジナル
2025-01-03 07:33:40513ブラウズ

Can PHP PDO Prepared Statements Use Parameters for Table or Column Names?

PHP PDO ステートメントのテーブル名または列名をパラメーターで置き換えることはできますか?

準備された PDO ステートメントにテーブル名をパラメーターとして渡すことはできません。これを試みる次のコードを考えてみましょう:

$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1');
if ($stmt->execute(array(':table' => 'users'))) {
    var_dump($stmt->fetchAll());
}

テーブル名と列名はパラメータで置き換えることができないため、このアプローチではエラーが発生します。

の安全な挿入SQL クエリへのテーブル名

テーブル名を SQL クエリに安全に挿入するには、別のアプローチが必要です。

$sql = "SELECT * FROM $table WHERE 1"

などのユーザー入力をクエリに直接入力することは避け、代わりに入力のフィルタリングとサニタイズを検討してください。 1 つの方法では、クエリを動的に実行する関数に短縮パラメータを渡します。 switch() ステートメントを使用して、有効なテーブル名をホワイトリストに登録できます。例:

function buildQuery( $get_var ) 
{
    switch($get_var)
    {
        case 1:
            $tbl = 'users';
            break;
    }

    $sql = "SELECT * FROM $tbl";
}

デフォルトのケースを省略するか、エラー メッセージを表示するケースを使用することにより、必要な値のみが使用されることが保証されます。

以上がPHP PDO プリペアド ステートメントではテーブル名または列名のパラメータを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。