3

関数が安全なクエリPDO::Prepareを作成することを読みました。これは、エスケープ文字を手動でリテラル化する必要がないということですか? バックスラッシュ文字など。

4

1 に答える 1

5

いいえ、絶対にというわけではありません。あなたが読んだものは誤解を招くものです。

「準備されたステートメント」と「パラメーター化されたクエリ」には違いがあります。衛生目的で後者が必要です。

例えば:

$pdo->prepare("SELECT * FROM t1 WHERE col1 = $USER_PROVIDED_VALUE");

用意されていても安全ではありません。代わりに、これを行う必要があります。

$stmt = $pdo->prepare("SELECT * FROM t1 WHERE col1 = ?");
$stmt->execute(array($USER_PROVIDED_VALUE));

クエリを適切にパラメータ化しないと、クエリを準備してもセキュリティの観点からは何の役にも立ちません。

于 2013-01-31T20:54:19.643 に答える