Проверка перед подстановкой в запрос

RASAMAHA

Новичок
Проверка перед подстановкой в запрос

Имеется запрос, в который зависит от переменной $id. Она естественно должна быть только числом. Достаточно ли для неё проверки is_numeric()?
PHP:
SELECT * FROM table WHERE id = '$id'
 

DiMA

php.spb.ru
Команда форума
> На форуме с: Jul 2004

Бедняга, за 5 лет так и не выяснил этого? Нда, печально...

Бред про is_* забудь.

1. использовать intval() или (int) для чисел.
2. использовать addslashes (тока для Win1251 или UTF-8 кодировок) и кавычки.
 

RASAMAHA

Новичок
5 лет это еще че))

А почему забыть про is_*? Я просто не понимаю, проверю я число это или нет? Если да, то воткну в запрос.

Вообще я понял, я маленько не правильно задал вопрос, мне по задачи надо было еще узнать число ли это. А не просто тупо пихнуть в запрос.
 

Mandor

Новичок
is_numeric() сработает.

Совет: возьмите за правило делать intval/addslashes/mysql_escape_string для входящих данных прямо в строке формирования запроса, вне зависимости от того, проверили вы их с помощью is_numeric, preg_match или чего угодно прочего и вне зависимости от того как вы их преобразовали ранее. Если так не делать, то гораздо легче столкнуться с ситуацией, когда вы отправляете на бд-сервер запрос с "незаэскейпенными" данными.

Соевет 2: используйте библиотеку, которая позволяет формировать sql-запросы через плейсхолдеры (например PDO) и забудте об эскейпинге как о страшном сне.
 

DiMA

php.spb.ru
Команда форума
два чайника пообщались.. довольные по уши :)
 
Сверху