可能性の重複:
How prepared statements can protect from SQL injection attacks?
私はPDOで$ _GETを使用している場合は、私はまだそれをエスケープする必要がありますか?私の理解は、これはSQLインジェクションの影響を受けないということですが、私はまだそれを逃していないのでは不安です。だから、誰かがこの小さなコードブロックを見て、それが安全かどうか教えてもらえますか?
<?php
$hostname = 'localhost';
$username = 'root';
$password = 'root';
$database = 'database';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare("SELECT * FROM comments WHERE pid = :pid");
$pid = $_GET['pid'];
$stmt->bindParam(':pid', $pid, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
$stmt->execute();
echo $stmt->rowCount();
$dbh = null;
?>
また、私は心配している$ _GETです。どんな助けもありがとう、ありがとう。
準備されたクエリの変数をエスケープする必要がある場合、準備はほぼ完全に役に立たなくなります – zerkms
言い換えれば、準備されたステートメントのプレースホルダに必要なものを埋め込みます - DBはあなたにエスケープしますそのデータはどこから来たのか。 –
それは、(準備文とは異なり)エスケープしても "データ"が "安全"にならないと分かっている人にとっては、かなり面白い不安です。 –