0
所以我明白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如果你还没有这样做。 –
好的。似乎有一个误解。我不知道这是否会发生。这正如我所描述的那样发生。也许我应该制作一个视频? –