Я использую CodeIgniter для запроса базы данных SQL. Мне нужно использовать REGEXP в предложении where, и я прочитал, что это можно сделать с помощью CodeIgniter Active Record, но я не могу заставить его работать. Даже в примерах я видел активную запись $ this-> db-> where () со значением false в качестве 3-го параметра, что означает, что данные не экранированы. Решение, с которым я пошел, просто что-то вроде
$this->db->query("SELECT column FROM table WHERE column REGEXP 'pattern'");
Проблема в том, что шаблон содержит некоторый пользовательский ввод, например, если кто-то выполнил поиск в БД с фразой "найди меня", шаблон будет выглядеть примерно так:
"find[\s\t\n]*me"
Возможен ввод вредоносного кода вместо слов "найди меня". Как я могу избежать этой строки? Я пробовал
$this->db->escape( "find[\s\t\n]*me" );
, которая выдает ошибку, потому что все обратные слэши экранированы, чего я не хочу. Я пробовал
$a = $this->db->escape( "find" );
$b = $this->db->escape( "me" )
$pattern = $a . "[\s\n\t]*" . $b;
$this->db->query( "SELECT column FROM table WHERE column REGEXP $pattern");
но это также дает ошибку. Мне даже нужно беспокоиться о том, чтобы избежать этого, или мне, возможно, нужно провести некоторую проверку на стороне JS, чтобы убедиться, что вместо этого нет злонамеренной вставки?