根據(jù) DBAL 文檔,只有 setFirstResult 和 setMaxResults 這兩種方法被設計為對 SQL 注入是安全的。但是在QueryBuilder部分,他們提到要安全地使用QueryBuilder,我們必須使用setParameter方法傳遞用戶輸入。所以我看到了2種方法來做到這一點,但我不知道它們是否有真正的區(qū)別:方式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條經(jīng)驗 獲得超11個贊
這兩個示例最終執(zhí)行相同的操作。也就是說,當您使用參數(shù)值時,將使用 綁定到語句。setParameter()bindValue()
請參閱 https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Connection.php#L1326-L1356,了解在 DBAL 中執(zhí)行此操作的內部函數(shù)。
使用第二種形式的唯一原因是,如果要使用 而不是 。如果要通過引用將參數(shù)綁定到 PHP 變量,則可以執(zhí)行此操作,例如,您可以在啟動循環(huán)之前準備一次查詢,然后在循環(huán)中多次執(zhí)行它。bindParam()bindValue()
這兩種方法在 SQL 注入方面提供相同程度的保護。
- 1 回答
- 0 關注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消
