关于预处理语句的 SQL 注入属性的说明。
仅当您使用 bindParam 或 bindValue 选项时,预处理语句才能防止 SQL 注入。
例如,如果您有一个名为 users 的表,其中包含两个字段:username 和 email,并且有人更新了他们的用户名,您可能会运行
UPDATE `users` SET `user`='$var'
其中 $var 将是用户提交的文本。
现在如果你做了
<?php
$a=new PDO("mysql:host=localhost;dbname=database;","root","");
$b=$a->prepare("UPDATE `users` SET user='$var'");
$b->execute();
?>
如果用户输入了 User', email='test,那么将会发生注入,email 字段会被更新成 test,同时 user 字段会被更新成 User。
使用 bindParam,如下所示
<?php
$var="User', email='test";
$a=new PDO("mysql:host=localhost;dbname=database;","root","");
$b=$a->prepare("UPDATE `users` SET user=:var");
$b->bindParam(":var",$var);
$b->execute();
?>
SQL 语句会被转义,用户名会被更新成 User', email='test'