我想知道是否必须使用bindParam来阻止使用PDO和MYSQL进行SQL注入。
示例:
$username=$_POST['username'];
$password=$_POST['password'];
$cryptpass=hashFunction($password);
$sth=$dbh->prepare("INSERT INTO users(username,password) VALUES(?,?)");
$sth->execute(array($username,$cryptpass));
编写此代码是否安全且正确?省略bindParam可以缩短代码。
答案 0 :(得分:1)
重要的是你使用参数而不是直接替换查询字符串。将参数与bindParam
或数组参数绑定到execute
并不重要,它们是等效的。
答案 1 :(得分:1)
这仍然将值绑定到预准备语句。你正在使用bindParam
函数做同样的事情。所以答案是肯定的,它同样安全。 bindParam
只允许更多功能,而不仅仅是与execute
函数绑定,例如:
$sth=$dbh->prepare("Select * from users where status=:v1");
$sth->bindParam(':v1',1,PDO::PARAM_INT);
$sth->execute();
这允许您默认指定data_type
execute
所有内容都以字符串形式发送。您也可以查看这个类似问题的答案:PDO bindParam vs. execute