Ering String в Like Query не работает (CodeIgniter)

0

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

Одна строка, которую я тестировал, является 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

Однако с моими 2 подготовленными 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 (CONCAT(p. Name , ' > ', c. Name ) LIKE '%'cal'%' где оператор LIKE должен быть '%cal%' поэтому я попытался использовать trim и regex но они дали мне тот же результат:

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

Как это исправить? Как я могу помешать моему запросу перевести мою строку в качестве специальных символов?

Любая помощь высоко ценится.

  • 0
    что внутри $this->input->post('search') ??
  • 0
    Привет @AbdullaNilam - строка, которую я ввел, это "Cal"
Показать ещё 2 комментария
Теги:
codeigniter-3
trim

1 ответ

0
$this->db->select(array('c.ID as id','CONCAT(p.Name, " > ", c.Name) as name',$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')));
$this->db->order_by('p.Name ASC, c.Name ASC');
$this->db->limit($result_count, $offset);
$query = $this->db->get();

или с MATCH, AGAINST

$field = $this->db->escape($this->input->post('search'));
$this->db->select(array('c.ID as id','CONCAT(p.Name, " > ", c.Name) as name',$term.' as q'));
$this->db->from('cq_provice p');
$this->db->join('cq_city c', 'c.provinceID = p.ID');
$this->db->where('MATCH (p.Name,c.Name) AGAINST ('.$field.')', NULL, FALSE);
$this->db->order_by('p.Name ASC, c.Name ASC');
$this->db->limit($result_count, $offset);
$query = $this->db->get();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню