Запрос типа codeigniter с одинарной кавычкой в ​​строке поиска

Я работал над этим более 4 часов. Я выбрал запрос с использованием активной записи, которую я делаю: $this->db->like('items.name',$search); все работает нормально, но если в строке поиска $ есть одинарная кавычка ('), она выдает такую ​​ошибку:

У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 's%' ИЛИ default_items,short LIKE 'faith\'s%' LIMIT 5' в строке 5

Я только что проверил, что в моей активной записи для LIKE-запроса добавляются двойные косые черты \ вместо одинарных. Я попытался в MYSQL BT удалить один слеш, и он работает.

мой код:

$q = "faith's";
$query = $this->db->select('items_categories.slug as category_slug, items_categories.name as cat_name, items.name, items.price_value, items.cover_photo, items.slug');
$query->select('default_items.short as short',false);
$query->select('date(default_items.date_created) as date_created',false);
$query->join('items_categories','items_categories.id=items.root_id','inner');
$query->join('users','items.company_id=users.id','inner');
$query->like('items.name',$q);
$query->or_like('items.short',$q);
$query->limit(5);
$result =  $query->get($this->_table);
$both_prod_results = $result->result();

Я использую пирокмы 2.x.

2 ответа

Вы можете попробовать следующий код, может быть, он поможет вам, но вы должны добавить \ перед каждым 'в ваших запросах:

$value = "faith\'s";
$sql_request = "`short`  LIKE '%". $value ."%'";

$query = $this->db
              ->select('*')
              ->where($sql_request, null, false)
              ->get('default_items');

$result = $query->result();

dump($result);

Я думаю, что мне нужно ответить на свой вопрос. Ну, это хак (не думайте, если это безопасно), я исправил мой драйвер MYSQLI:

я заменил это:

return str_replace(array($this->_like_escape_chr, '%', '_'),
                    array($this->_like_escape_chr.$this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
                    $str);

с этим:

return str_replace(array($this->_like_escape_chr, '%', '_'),
                    array($this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
                    $str);

это было добавление дополнительной косой черты. и также не думаю, что это позволит инъекции SQL и т. д. что-нибудь.

если кто-то знает, что это правильно, пожалуйста, прокомментируйте.

Спасибо Умайр

Другие вопросы по тегам