Для моей базы данных / таблицы / столбца сортировки установлено значение * _ci без учета регистра. Я хочу написать чувствительный к регистру запрос во время выполнения, используя CodeIgniter for LIKE и WHERE. Я пробовал подход примерно так
$this->db->where("fieldname LIKE BINARY 'value'", NULL, true);
Но этот подход не работает с предложением LIKE
$this->db->like("fieldname LIKE BINARY 'value'", NULL);
Любая помощь будет принята с благодарностью!
Как насчет этого
$value = "abdulla";
$query = $this->db->query("SELECT * FROM table WHERE fieldname1 Like '%$value%' OR fieldname2 Like '%$value%'");
$result = $query->result_array();
на самом деле $this->db->like();
вести себя как WHERE ??? LIKE '???'
Например
$this->db->like('name', 'abdulla');
// Produces: WHERE name LIKE '%abdulla%'
Вы можете сделать это с get()
метод как:
$result = $this->db
->where('fieldname like binary "value"', NULL, FALSE)
->get('table')
->result();
Таким образом, вы можете попробовать это как
$this->db->like('fieldname', 'value');
Вы можете контролировать подстановочный знак (%)
согласно вашим потребностям вы можете использовать 'before'
, 'after'
а также 'both'
, Если вам не нужен подстановочный знак, тогда вы можете просто передать третий параметр как none
,
Проверить DOCS
Так так так …
После осмотра и удара головой я наконец решил эту проблему! Прежде всего я должен установить параметры сортировки таблицы / столбца на * _cs, после этого, если мне нужно совпадение с учетом регистра, я должен выполнить простой
$this->db->where('field', 'value');
или же
$this->db->like('field', 'value');
Но если вы хотите сопоставление без учета регистра, чем использовать
$this->db->where("LOWER('field')", strtolower('value'), false);
$ this-> db-> where () принимает необязательный третий параметр. Если вы установите значение FALSE, CodeIgniter не будет пытаться защитить имена полей или таблиц обратными галочками.
или же
$this->db->like("LOWER('field')", strtolower('value'));
Помните, что CodeIgniter следует стандартному сопоставлению вашей базы данных MySQL, в CI 2.x нет встроенной функции для перезаписи сопоставления базы данных по умолчанию. Поэтому, если для вашей сортировки столбца / таблицы установлено значение * _ci (без учета регистра), CI будет рассматривать abc = aBc, но если для вашей сортировки установлено значение * _cs, он будет учитывать abc! = ABc