いくつかの異なるデータベース フィールドを調べて、適切な検索結果を返す MySQL クエリを作成しようとしています。たとえば、ユーザーが「plumber leeds」を検索した場合、ビジネスの「都市」フィールドに「leeds」があり、名前の一部に「plumber」という単語が含まれている場合、その検索結果が返されるようにします。
ユーザー検索には複数の単語が含まれる可能性があり、予測できません。私は現在、検索用語を爆発させ、トリミングし、それを使用して複雑な検索クエリをコンパイルし、関連するすべての結果を返すことで、必要なことを達成しています。
この複雑なクエリを変数に格納し、Codeigniter の Active Record を使用してクエリを実行しています。
$this->db->where($compiled_query, null, false);
私が懸念しているのは、クエリをバッククォートで保護していないことです。これがセキュリティ上の問題であるかどうかはわかりません。XSS Clean を有効にしていますが、これで問題ないかどうかはまだわかりません。
CI のユーザー マニュアルによると: $this->db->where() は、オプションの 3 番目のパラメーターを受け入れます。FALSE に設定すると、CodeIgniter はフィールドまたはテーブル名をバッククォートで保護しようとしません。
ソース: http://ellislab.com/codeigniter/user-guide/database/active_record.html
別の質問で、ここでクエリをコンパイルする方法に関する情報。mysql_real_escape_string が非推奨になりつつあり、キャッチオールではないことは承知しているため、この方法に関する私の懸念の一部です。
どんな助けでも大歓迎