哪个是在php中绑定param的最好的安全方法

时间:2017-08-28 15:02:40

标签: php security pdo bind

这是绑定值的最佳安全方式?我知道有三种方式

1

$Email=$con->quote($Email);
$Example=$con->prepare("UPDATE Ex SET Email=:Email");
$Example->bindParam(':Email', $Email);
$Example->execute();

2

$Email=$con->quote($Email);
$Example=$con->prepare("UPDATE Ex SET Email=:Email");
$Example->execute(array(
   ':Email' => $Email,
));

3

$Email=$con->quote($Email);
$Example=$con->prepare("UPDATE Ex SET Email=:Email");
$Example->bindParam(':Email', $Email);
$Example->execute(array(
   ':Email' => $Email,
));

2 个答案:

答案 0 :(得分:1)

他们都错了。由于您单独使用quote,因此最终查询实际上等同于(假设$Email,例如foo@example.com):

UPDATE Ex SET Email="\"foo@example.com\""

换句话说,引号成为值的一部分,这可能不是你想要的。

其中任何一个都可以。

$Example = $con->prepare('UPDATE Ex SET Email = :Email');
$Example->execute(array(':Email' => $Email));
$Example=$con->prepare('UPDATE Ex SET Email = :Email');
$Example->bindParam(':Email', $Email);
$Example->execute();

执行 bindParam 将数组传递给execute是无稽之谈,因为后者只会覆盖前者和{{1}将是多余的。

答案 1 :(得分:0)

这三种方法在保护代码方面是相同的,例如SQL注入。 No3是多余的 - 你不需要使用bindParam并传递execute中的参数(如果传递的参数有不同的值,可能会使另一个值相形见绌,但我没有找到任何关于它在文档中)