В своих скриптах мне приходится получать ID переданной записи из URL (к примеру, /article/1). Получаю я его в виде строки, но в результате это должно быть число.
Чтобы избежать SQL-инъекций я перевожу полученный ID в число с помощью intval(). Но есть 1 проблема: предположим, что перешли на страницу /article/a1a, тогда после прохода через функцию intval() мне вернется 0, что вполне нормально (т.к. 0 и булевом типе 0, то я просто поставлю условие и выведу ошибку о том, что такой записи не существует), но если перейти на страницу /article/1a, то после прохождения через intval() я получу результат 1 и получится, что такая запись существует, т.к. запись с ID = 1 хранится в базе.
Что я предпринял: я записал в переменную полученное из URL значение. Дальше я обработал его intval()'ом и тоже сохранил, а дальше я сравниваю исходное значение из URL со значением обработанного intval()'ом и обработанного strval()'ом, т.е. я получаю число и перевожу в строку.
Наглядно: была строка '1a'. Я сделал число 1 с помощью intval('1a') и сделал строку '1' с помощью strval(1). Дальше я сравниваю с исходным: '1a' == '1'. Разумеется, неравно и я выведу ошибку пользователю.
Так вот, мне кажется, что все это можно сделать намного легче и быстрее, чем это делаю я. Если это так, то как реализовать по-другому и быстрее?
|