Как экранировать значения в выражениях LIKE без добавления ненужных кавычек внутри соседних подстановочных знаков в CodePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как экранировать значения в выражениях LIKE без добавления ненужных кавычек внутри соседних подстановочных знаков в Code

Сообщение Anonymous »

Я тестировал свой запрос со случайными строками, чтобы увидеть, будут ли отображаться результаты.
Одна строка, которую я тестировал, — это Cal, поэтому запрос должен быть простым, верно?

Код: Выделить всё

SELECT
c.`ID` AS id,
CONCAT(p.`Name`, ' > ', c.`Name`) AS name,
'cal' AS q
FROM `cq_provice` p
JOIN `cq_city` c ON c.`provinceID` = p.`ID`
WHERE (CONCAT(p.`Name`, ' > ', c.`Name`) LIKE '%cal%')
ORDER BY p.`Name`, c.`Name`
LIMIT 0, 50
Однако с моими двумя подготовленными sql-запросами: один с использованием способа CodeIgniter, а другой с использованием обычного:
#1

Код: Выделить всё

$this->db->select('c.ID as id');
$this->db->select('CONCAT(p.Name, \' > \', c.Name) as name');
$this->db->select($term.' as q');
$this->db->from('cq_provice p');
$this->db->join('cq_city c', 'c.provinceID = p.ID');
$this->db->like('CONCAT(p.Name, \' > \', c.Name)', $this->db->escape($this->input->post('search')), 'both');
$this->db->order_by('p.Name', 'ASC');
$this->db->order_by('c.Name', 'ASC');
$this->db->limit($result_count, $offset);
$query = $this->db->get();
#2

Код: Выделить всё

$query = "SELECT c.`ID` as id, CONCAT(p.`Name`, ' > ', c.`Name`) as name, ".$term." as q
FROM `cq_provice` p JOIN  `cq_city` c ON c.`provinceID` = p.`ID`
WHERE (CONCAT(p.`Name`, ' > ', c.`Name`) LIKE
'%".$this->db->escape($this->input->post('search'))."%')
ORDER BY p.`Name`, c.`Name` LIMIT ".$offset.", ".$result_count;
И оба они дают мне один и тот же запрос:

Код: Выделить всё

SELECT c.`ID` as id, CONCAT(p.`Name`, ' > ', c.`Name`) as name, 'cal' as q
FROM `cq_provice` p JOIN `cq_city` c ON c.`provinceID` = p.`ID`
WHERE (CONCAT(p.`Name`, ' > ', c.`Name`) LIKE '%'cal'%')
ORDER BY p.`Name`, c.`Name` LIMIT 0, 50
Моя проблема заключается в операторе WHERE WHERE (CONCAT(p.Имя)

Код: Выделить всё

, ' > ', c.Имя) LIKE '%'cal'%'
где оператор LIKE должен быть «%cal%», поэтому я попытался использовать обрезку и регулярное выражение, но они дали тот же результат:

Код: Выделить всё

SELECT c.`ID` as id, CONCAT(p.`Name`, ' > ', c.`Name`) as name, 'cal' as q
FROM `cq_provice` p JOIN `cq_city` c ON c.`provinceID` = p.`ID`
WHERE (CONCAT(p.`Name`, ' > ', c.`Name`) LIKE 'Êl%')
ORDER BY p.`Name`, c.`Name` LIMIT 0, 50
Как это исправить? Как я могу запретить моему запросу переводить мою строку в специальные символы?

Подробнее здесь: https://stackoverflow.com/questions/496 ... s-inside-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»