Выводить города из mysql по первой букве, как сделать?
У меня база mysql города и страны. 1000000 записей
Я ищу город например Москва, делаю запрос в бд вытащи мне 10 городов.
Есть text input при нажатии на каждую букву происходит Ajax запрос где отправляется данные из этого поля на сервер. То есть сначала нажимаю "М" идет запрос он мне вытаскивает из базы 10 городов в которых содержится буква "М". Получается выводит вот такие города Абакумово, Абакумовская и так далее. Как видите, первая буква в городах это "А", а не "М".
Я хочу чтобы при нажатии кнопки "М" выводились города начинающиеся на М. Например Москва, Можайск и тд
Далее нажимаю например "Мо", выводит из базы города начинающиеся на Мо, и так далее
Можно как то правильно вытаскивать из бд такое, или нужно обрабатывать список php кодом? и уже потом печатать ?
Любая функция, какая вам больше нравится, которая будет экранировать пользовательский ввод. Вы ведь не хотите позволить пользователю изменять запрос целиком и добавить в него какой нибудь DROP TABLE cities? :-)
@ash_1 php.net + dev.mysql.com
Но они не нужны, т. к. достаточно понимать, что происходит в строке $query_cities = ... Да-да, PHP и MySQL не знают, что вы подставляете данные, для них у вас с одной стороны просто конкатенация строк, с другой — просто запрос, который получился в итоге. Так что никто не помешает мне в качестве названия города ввести часть запроса, и если вы не обрабатываете такую ситуацию (путем экранирования), то и получите не автокомплит, а интерфейс по творению с БД чего угодно.
@ash_1 я понятия не имею какие у вас запросы. Возможно надо делать не like %query%, а like query% и регуляркой обозначать начало строки.
Я хочу чтобы мой велосипед работал вот так, но устройство его не покажу
$country = $_GET['country'];
$townsearchres = mysql_query("SELECT id,city FROM cities WHERE country_id='$country' and city like '%$city%' LIMIT 10");
$townsearchrow = mysql_fetch_array($townsearchres);