phpを使用して生成されたSQLクエリがあります。検索語に一致するフィールドを持つレコードと、検索語に一致する他のテーブルに関連するレコードがあるレコードの代理キーを返します。
テーブルを1つに結合してから、別の関数を使用して、テーブルに含まれる列のリストを取得します(継続的なメンテナンスを減らすために、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インジェクションに対して脆弱です。私はそれを防ぐためにmysql_*コードをpdoに置き換えていますが、これをどのように保護するかは私を超えています。
だから私の質問は、これらすべてのテーブルを安全な方法で検索するにはどうすればよいですか?