我有一个使用 php 生成的 sql 查询。它返回具有与搜索词匹配的字段的任何记录的代理键,以及在其他表中具有与搜索词匹配的相关记录的任何记录。
我将表合并为一个,然后使用单独的函数来检索表中包含的列的列表(我希望允许添加到表而不重写 php 代码以降低持续维护)。
然后使用此代码
foreach ($col_array as $cur_col) {
foreach ($search_terms_array as $term_searching) {
$qry_string.="UPPER(";
$qry_string.=$cur_col;
$qry_string.=") like '%";
$qry_string.=strtoupper($term_searching);
$qry_string.="%' or ";
}
}
生成查询字符串的其余部分
select tbl_sub_model.sub_model_sk from tbl_sub_model inner join [about 10 other tables]
where [much code removed] or UPPER(tbl_model.image_id) like '%HONDA%' or
UPPER(tbl_model.image_id) like '%ACCORD%' or UPPER(tbl_badge.sub_model_sk) like '%HONDA%'
or UPPER(tbl_badge.sub_model_sk) like '%ACCORD%' or UPPER(tbl_badge.badge) like '%HONDA%'
or UPPER(tbl_badge.badge) like '%ACCORD%' group by tbl_sub_model.sub_model_sk
它做了我想要它做的事情,但是它很容易受到 sql 注入的影响。我一直在用 pdo 替换我的 mysql_* 代码以防止这种情况发生,但我将如何保护这个代码超出了我的范围。
所以我的问题是,我如何以安全的方式搜索所有这些表?