根据 DBAL 文档,只有 setFirstResult 和 setMaxResults 这两种方法被设计为对 SQL 注入是安全的。但是在QueryBuilder部分,他们提到要安全地使用QueryBuilder,我们必须使用setParameter方法传递用户输入。所以我看到了2种方法来做到这一点,但我不知道它们是否有真正的区别:方式1:$qb->select('USR_id', 'USR_email')->from('T_user_USR')->where('USR_email = ? ')->setParameter(0, $email);$stmtQb = $qb->execute();$results = $stmtQb->fetchAll();方式 2 :$qb->select('USR_id', 'USR_email')->from('T_user_USR')->where('USR_email = ? ');$stmtQb = $dbal->prepare($qb->getSQL());$stmtQb->bindValue(1, $email);$stmtQb->execute();$results = $stmtQb->fetchAll();最好的方法是什么?提前致谢
1 回答

呼唤远方
TA贡献1856条经验 获得超11个赞
这两个示例最终执行相同的操作。也就是说,当您使用参数值时,将使用 绑定到语句。setParameter()
bindValue()
请参阅 https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Connection.php#L1326-L1356,了解在 DBAL 中执行此操作的内部函数。
使用第二种形式的唯一原因是,如果要使用 而不是 。如果要通过引用将参数绑定到 PHP 变量,则可以执行此操作,例如,您可以在启动循环之前准备一次查询,然后在循环中多次执行它。bindParam()
bindValue()
这两种方法在 SQL 注入方面提供相同程度的保护。
- 1 回答
- 0 关注
- 96 浏览
添加回答
举报
0/150
提交
取消