亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號