したがって、私はPDOプリペアドステートメントがSQLインジェクションとエスケープから保護すべきであると理解しています。しかし、私が次のことを試みたとき...PDOでのエスケーププリペアドステートメントパラメータ
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["id"]))
{
$id = $_POST["id"];
//$id = "2' AND name='Entry2";
$someinfo = "updated";
...DB Stuff...
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $dbpassword);
$stmt = $conn->prepare("UPDATE testdb SET info=:someinfo WHERE id=:id");
$stmt->bindParam(':id', $id);
$stmt->bindParam(':someinfo', $someinfo);
$stmt->execute();
$conn = null;
exit();
}
次に、id = 2とname = entry2の行が更新されます。これは他のSQLクエリにエスケープするために使用することができるようになりましたが、この種のエスケープが本当に損害を与えないようにするための予防措置を講じることができます。しかし、私は、SQLクエリーパラメータの予期しない変更を避けるためのエスケープを防ぐ他の方法がないことを確かめたいと思っていました。 (注目すべきことに、私はSQLiでも同様のことを試してみたのと同じ結果が得られました)
私には何か不足していますか?それともPrepared Statementsの仕組みでもあります。
[非常に関連しています](https://security.stackexchange.com/questions/15214/are-prepared-statements-100-safe-against-sql-injection) – Script47
ドキュメントhttp ://php.net/manual/en/pdo.prepared-statements.php(まだ行っていない場合) –
誤解があるようです。これが起こるかどうか疑問に思っていません。これは私の説明とまったく同じように起こっています。多分私はビデオを作りますか? –