準備されたステートメントはデータベース識別子とキーワードを処理できますか?

Linda Hamilton
リリース: 2024-11-18 18:46:02
オリジナル
592 人が閲覧しました

Can Prepared Statements Handle Database Identifiers and Keywords?

準備されたステートメント: 識別子とキーワードを処理できますか?

動的クエリでは、変数を利用してテーブル、フィールド、および検索値を指定します。変数をクエリに連結することは成功していることが証明されていますが、PDO の bindingParam() または bindingValue() を使用して変数をバインドすると、空の配列が生成されます。

機能しない理由:

PDO 準備済みステートメントでは、データ リテラルのプレースホルダーのみが許可されます。プレースホルダーを使用して識別子 (テーブル名またはフィールド名) またはキーワードを表現しようとしても機能しません。

解決策:

  • 識別子: 識別子を表す変数を含めるには、次の規則に従います。

    • 識別子はバッククォート (`) で囲みます。
    • 変数内のバッククォートは 2 つ (``) でエスケープします。
  • キーワード:

    • ユーザー指定のキーワードをホワイトリストと照合します。
    • ホワイトリストに登録されたキーワードのみを使用しますクエリ内。

コード例:

// 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート