PHP PDO プリペアド ステートメントのバインディング識別子と構文キーワード
動的クエリでは、変数を利用してテーブル名、列を定義することで柔軟なデータベース操作が可能名前と検索値。ただし、PDO プリペアド ステートメントを使用して識別子 (テーブル名またはフィールド名) または構文キーワードをバインドすると、予期しない結果が生じる可能性があります。
問題:
bindParam() または bindingValue を使用する場合() 識別子または構文キーワードを表す変数をバインドすると、予期されるデータベースの代わりに空の配列が返されます。 results.
説明:
PDO プリペアド ステートメントはデータ リテラルのみをバインドできます。したがって、識別子またはキーワードをバインドしようとしても、望ましい結果は得られません。
解決策:
安全で信頼性の高い動的クエリを作成するには、次のことが重要です。
コード例:
識別子のフォーマットと検証を行うには:
$field = "`" . str_replace("`", "``", $field) . "`";
ホワイトリストに登録してキーワードを検証します:
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
次に、サニタイズされた変数をプリペアド ステートメントに含めます:
$stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%' . $searchTerm . '%');
これらのルールに従うことで、動的データベース クエリの有効性とセキュリティを確保できます。
以上がPHP PDO プリペアドステートメントで識別子とキーワードをバインドできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。