省略bindParam与PDO是否安全?

时间:2014-04-22 21:23:31

标签: php mysql security pdo sql-injection

我想知道是否必须使用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可以缩短代码。

2 个答案:

答案 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