Как сделать поиск по id по числу без преобразования?
Есть таблица page со столбцом id (int PRIMARY KEY NOT NULL AUTO_INCREMENT)
Для получения по id: SELECT * FROM page WHERE id = '1 LIMIT 1
все находит корректно.
Но также находит и по запросу, где в id есть число со строкой, например: SELECT * FROM page WHERE id = '1dsf' LIMIT 1
Если я правильно понимаю, то MySQL просто преобразует значение к числу и обрезает строчные символы.
Если это так, как мне делать запросы со строгой проверкой, а если не из-за преобразования, то как мне этого избежать?
scooby_doe, если честно сам не знаю. Делаю админку и для редактирования страницы, собираю url с id страницы. Но когда тестировал отдачу 404 ошибки, добавил к id строку и получил страницу)) Может и не критично это, но почему-то смутило)
Лев Салатов, звучит как sql inj, где-то экранируется id при получении его из запроса?
Если нужно использовать некий символьный код для страниц, а не id, например уйти от site.ru/page/1 на site.ru/page/someshit, тогда нужно ввести столбец строковый slug и уже по нему делать выборку. И опять же, экранирование!
scooby_doe, да, slug использую для фронта, по id в админке проще.
ID экранирую обязательно, а теперь и бракую если после site.ru/page/ приходит что-то кроме числа. Просто стало интересно, можно ли это устранить на стороне MySQL.
А насчет проблемы на ровном месте — согласен, но без саморазвития не будет прогресса)
Лев Салатов, наоборот, выше уровнем.
Собственно, валидация внешних данных (а дело, видимо, в них) делается в контроллере, в модель уже должны приходить такие, чтобы шаманить с ними не требовалось.