準備されたステートメント: 識別子とキーワードを処理できますか?
動的クエリでは、変数を利用してテーブル、フィールド、および検索値を指定します。変数をクエリに連結することは成功していることが証明されていますが、PDO の bindingParam() または bindingValue() を使用して変数をバインドすると、空の配列が生成されます。
機能しない理由:
PDO 準備済みステートメントでは、データ リテラルのプレースホルダーのみが許可されます。プレースホルダーを使用して識別子 (テーブル名またはフィールド名) またはキーワードを表現しようとしても機能しません。
解決策:
識別子: 識別子を表す変数を含めるには、次の規則に従います。
キーワード:
コード例:
// Safely format identifier $field = "`" . str_replace("`", "``", $field) . "`"; $sql = "SELECT * FROM t ORDER BY $field"; // Whitelist keyword $dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; $sql = "SELECT * FROM t ORDER BY field $dir";
以上が準備されたステートメントはデータベース識別子とキーワードを処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。