我的課堂中有以下方法。我的目標基本上是找到數據庫中的所有管理員,但可以選擇限制sql語句。例如" AND U.username='jake56'
或" AND A.firstName='Jake'
。我想知道是否可以選擇爲SQL注入添加限制。安全地動態更改SQL語句
/**
* Returns an array of manager Users
* @param string (optional) $limits - limit the query EX: 'AND U.userId > 7'
* @return an array of managers with associative arrays
*/
public function find_all_managers($limits = '') {
$sql = "SELECT U.*, A.*
FROM Users U
JOIN Address A
ON U.addressId=A.addressId
WHERE U.role='manager' " . $limits;
// run the query
$result = $this->query($query);
$managers = mysqli_fetch_all($result, MYSQLI_ASSOC);
return $managers;
}
這是安全的有這個參數嗎?我被告知這種方法容易受到SQL注入的影響,但是如果需要的話,我不會看到限制查詢的另一種方法。 例如,我可能要$db->find_all_managers(' WHERE A.lastName='smith')
儘管您應該使用參數化查詢,但可以手動輸入查詢的任何內容都可能會利用它。那麼就存在一個問題,如果你輸入了一個無效的條件呢?我寧願動態建立基於輸入的查詢,而不是輸入查詢的直接部分。 – Qirel