Запрос типа 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 и т. д. что-нибудь.
если кто-то знает, что это правильно, пожалуйста, прокомментируйте.
Спасибо Умайр