ホームページ >バックエンド開発 >PHPチュートリアル >SQL ステートメントの ORDER BY 句で PDO パラメータを使用できないのはなぜですか?
PDO ステートメントの ORDER BY パラメータ
SQL ステートメントの ORDER BY 句でパラメータを使用する際に問題が発生します。 :order および :direction パラメータは結果を生成できません。
問題の原因
PDO パラメータは ORDER BY 句で直接使用できません。これらは静的文字列である必要があります。
解決策
列名または並べ替え方向の PDO 定数はありません。したがって、これらの値を SQL ステートメントに直接挿入する必要があります。ただし、予防策を講じることが重要です。
$orders = array("name", "price", "qty"); $key = array_search($_GET['sort'], $orders); $order = $orders[$key]; $query = "SELECT * from table WHERE is_live = :is_live ORDER BY $order";
$order = white_list($order, ["name", "price", "qty"], "Invalid field name"); $direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction"); $sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction"; $stmt = $db->prepare($sql); $stmt->execute([$is_live]);
説明
ホワイトリスト関数は値をチェックし、値が正しくない場合はエラーを生成し、SQL のリスクを軽減します。注射攻撃。
例
$sql = "SELECT field from table WHERE column = :my_param"; $stmt = $db->prepare($sql); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->bindParam(':order', $order, PDO::PARAM_STR); $stmt->bindParam(':direction', $direction, PDO::PARAM_STR); $stmt->execute();
以上がSQL ステートメントの ORDER BY 句で PDO パラメータを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。