1 回答

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊
這將是我已經(jīng)在我的網(wǎng)站上教授的幾種技術(shù)的有趣組合,即
動態(tài)創(chuàng)建 WHERE 子句
為 IN 子句創(chuàng)建準(zhǔn)備好的語句
白名單以防止SQL 注入
最后會變成這樣
$allowed = ["Firstname", "Lastname"];
$conditions = [];
$parameters = [];
foreach ($filter as $key => $values) {
? ? if (array_search($key, $allowed, true) === false) {?
? ? ? ? throw new InvalidArgumentException("invalid field name!");?
? ? }
? ? $conditions[] = "`$key` in (".str_repeat('?,', count($values) - 1) . '?'.")";
? ? $parameters = array_merge($parameters, $values);
}
$sql = "SELECT * FROM table_name ";
if ($conditions)
{
? ? $sql .= " WHERE ".implode(" AND ", $conditions);
}
將生成您正在尋找的查詢,
SELECT * FROM table_name WHERE WHERE `Firstname` in (?,?) AND `Lastname` in (?)
以及要在 中使用的值數(shù)組PDO::execute(),制作防彈解決方案,其中值通過參數(shù)保護(hù),文件名通過白名單過濾保護(hù)不受保護(hù)
我唯一的懷疑是問題中出現(xiàn)的案例可能過于簡單化了。一旦您不僅需要精確匹配,還需要部分匹配或更大/更小的比較,代碼的復(fù)雜性就會飆升。
- 1 回答
- 0 關(guān)注
- 158 瀏覽
添加回答
舉報