使用 PHP7+PDO+SQLite,我正在尋找一種方法來使用在前端生成的數(shù)組形式的用戶定義過濾器來過濾表中的條目。為清楚起見,這是我正在尋找的示例:例子:數(shù)據(jù)庫中的表: ID Firstname Lastname Age+--------------+--------------+--------------+-------------+| 0 | John | Doe | 21 || 1 | John | Smith | 35 || 2 | Alice | Smith | 35 || 3 | Bob | Smith | 40 |+--------------+--------------+--------------+-------------+過濾器:/*Filters follow the structure:[ "Table Column Name 1" => [Match1 OR Match2 OR ...], AND "TCN 2" ...]Any column name not provided should match any value.*/[ "Firstname" => ["John"]]// ^ fetchAll() returns rows with ID 0 and 1[ "Firstname" => ["John", "Alice"], "Lastname" => ["Smith"]]// ^ ID 1 and 2 (but not 3)我需要找到一個可以將上面的數(shù)組轉(zhuǎn)換為 SQL 查詢的函數(shù),以獲取與過濾器匹配的所有行。出于性能原因,我想使用 SQL(我沒有太多經(jīng)驗(yàn))而不是獲取所有行并使用 PHP 過濾它們來執(zhí)行此操作。我知道我可以按照以下方式做一些事情:// Untested - for illustration purposes only$filter = [ "Firstname" => ["John", "Alice"], "Lastname" => ["Smith"]];$sql = "SELECT * FROM table_name WHERE ";foreach ($filter as $column => $matching_values) { foreach ($matching_values as $match) { $sql .= $column . " == " . $match . " OR "; } // Ugly way of removing trailing ` OR ` $sql = substr($sql, 0, -4); $sql .= " AND ";}// Ugly way of removing trailing ` AND `$sql = substr($sql, 0, -5);echo $sql;但這引入了一個巨大的 SQL 注入安全漏洞。我想知道是否有一種簡單而有效且安全的方法來實(shí)現(xiàn)這一目標(biāo)。如果需要,也可以更改過濾器的格式,例如更改為 RegEx(如果有人可以用 RegEx 替換上面示例中最里面的數(shù)組,則加分)?;蛘撸ɑ蛄硗猓?,一種以可搜索的方式描述我的問題的簡單方法可能會有所幫助,因?yàn)槲覠o法對此進(jìn)行太多研究,因?yàn)槲覠o法很好地表達(dá)它。
- 0 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消