Codeigniter LIKE с подстановочным знаком (%)
У меня есть простой запрос базы данных в codeigniter, однако я не могу заставить поиск работать с подстановочным знаком. Это мой код:
$this->db->like('film.title',"%$query%");
$this->db->escape_like_str($query);
$res = $this->db->get('film');
Если я удаляю wildcard (%), то поиск работает нормально. Также $query - это просто строка с пользовательским вводом. Любая помощь приветствуется.
Ответы
Ответ 1
$this->db->like()
автоматически добавляет% s и избегает строки. Итак, все, что вам нужно, это
$this->db->like('title', $query);
$res = $this->db->get('film');
См. Класс активной записи (CI 2) или класс Query Builder (CI 3) в документах CI для справки.
Ответ 2
Fur Full, как вы можете:
$this->db->like('title',$query);
Для запроса% $вы можете использовать
$this->db->like('title', $query, 'before');
и для $query% вы можете использовать
$this->db->like('title', $query, 'after');
Ответ 3
Я использую
$this->db->query("SELECT * FROM film WHERE film.title LIKE '%$query%'"); for such purposes
Ответ 4
Если вы не хотите использовать подстановочный знак (%), вы можете перейти к необязательному третьему аргументу опции "none".
$this->db->like('title', 'match', 'none');
// Produces: WHERE title LIKE 'match'
Ответ 5
$this->db->like('title', 'match', 'before');
// Produces: WHERE title LIKE '%match'
$this->db->like('title', 'match', 'after');
// Produces: WHERE title LIKE 'match%'
$this->db->like('title', 'match', 'both');
// Produces: WHERE title LIKE '%match%'
Ответ 6
Поиск нескольких полей одновременно может быть выполнен так...
function search($search)
{
$sql = "SELECT * FROM some_table
WHERE UPPER(a_name) LIKE ?
OR
UPPER(a_full_name) LIKE ?
OR
UPPER(a_city) LIKE ?
OR
UPPER(a_code) LIKE ?
";
$arr = array_map(array($this,"wrapLIKE"),array($search, $search, $search, $search));
$r = $this->db->query($sql, $arr);
return $r;
}
function wrapLIKE($string)
{
return strtoupper("%$string%");
}