Делаем телефонный справочник с поиском.
Все работает, все ищет, все отлично.
Не ищет только если регистр не совпадает.
Уже перепробовал и UPPER и LOWER, COLLATE в запросе вообще не работает, вся база создана заново на utf8_general_ci
Запрос выглядит так:for ($i=0; $i<count($arr); $i++) {
$arr[$i]= "'%" .$arr[$i] . "%'"; //Добавляем необходимые спецсимволы для поиска в MySQL
}
if ($search_field != null) {
if ($link->connect_error) { //Подключаемся к базеd
die('Connection error (' . $link->connect_errno . ')' . $link->connect_error . "\n");
} else {
echo "<script>console.log('Database has connected.');</script>";
for ($i=0; $i<count($arr); $i++) { //Подготавливаем запрос
$query = "SELECT * FROM phonebook WHERE"
. " surname LIKE". $arr[$i]
. " OR name LIKE" . $arr[$i]
. " OR middlename LIKE" . $arr[$i]
. " OR city LIKE" . $arr[$i]
. " OR bdate LIKE" . $arr[$i]
. " OR position LIKE" . $arr[$i]
. " OR depart LIKE" . $arr[$i]
. " OR mobile LIKE" . $arr[$i]
. " OR workphone LIKE" . $arr[$i]
. " OR email LIKE" . $arr[$i]
. " OR address LIKE" . $arr[$i]
. " OR company LIKE" . $arr[$i];
echo $query; //Проверка запроса
}
Вот что видит sql:
SELECT * FROM phonebook WHERE surname LIKE'%исмоилов%' OR name LIKE'%исмоилов%' OR middlename LIKE'%исмоилов%' OR city LIKE'%исмоилов%' OR bdate LIKE'%исмоилов%' OR position LIKE'%исмоилов%' OR depart LIKE'%исмоилов%' OR mobile LIKE'%исмоилов%' OR workphone LIKE'%исмоилов%' OR email LIKE'%исмоилов%' OR address LIKE'%исмоилов%' OR company LIKE'%исмоилов%'
Если вписать Исмоилов, то все находит без проблем, как и "смоилов".. Проблема вроде известная, но на всех форумах с динозаврами ни один совет не помог.
В PHPmyadmin все работает исправно, из чего вывод - у меня кривой скрипт.