为了账号安全,请及时绑定邮箱和手机立即绑定

DBAL QueryBuilder:避免SQL注入的safier方法是什么?

DBAL QueryBuilder:避免SQL注入的safier方法是什么?

PHP
慕村225694 2022-08-05 18:52:09
根据 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 注入方面提供相同程度的保护。


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号