关于准备好的语句的 SQL 注入属性的说明。
只有在使用 bindParam 或 bindValue 选项时,准备好的语句才能防止 SQL 注入。
例如,如果您有一个名为 users 的表,它有两个字段,用户名和电子邮件,而某人更新了他们的用户名,您可能会运行
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,那么会发生注入,电子邮件将被更新为 test,用户名也会被更新为 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。