这是绑定值的最佳安全方式?我知道有三种方式
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,
));
答案 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
中的参数(如果传递的参数有不同的值,可能会使另一个值相形见绌,但我没有找到任何关于它在文档中)