использование intval & real_escape_string при очистке целых чисел - PullRequest
5 голосов
/ 21 ноября 2011

Все дорогие.

Я использую целочисленные PK в некоторых таблицах базы данных mysql.Перед вводом из PHP-скрипта я делаю некоторую дезинфекцию, которая включает intval ($ id) и $ mysqli-> real_escape_string ().

Запросы довольно просты

insert into `tblproducts`(`supplier_id`,`description`) values('$supplier_id','$description')

В этом примере $ description проходит через real_escape_string (), тогда как $ supplier_id является только intval () 'ed.

IМне просто любопытно, есть ли ситуации, когда мне нужно применить как intval, так и real_escape_string к целому числу, которое я вставляю в БД?Так в принципе мне действительно нужно использовать?

$supplier_id = intval($mysqli->real_escape_string($supplier_id));

Спасибо.

Ответы [ 3 ]

9 голосов
/ 21 ноября 2011

intval намного быстрее, чем real_escape_string, поскольку real_escape_string должен подключаться к базе данных и экранировать на основе кодировки / сопоставления.

Вы также можете разыграть int как:

$val = (int)$val;

поэтому нет необходимости проводить двойную дезинфекцию

1 голос
/ 21 ноября 2011

Вам не нужно использовать $ mysqli-> real_escape_string после запуска intval для переменной. intval () вернет 0, если это не целое число, а если это целое число, то вернет значение.

Example:
$variable = '5';
$variable2 = 'c5b';
if(intval($variable)) echo 'It is a variable'; # intval will return 5 or true
if(intval($variable2)) echo 'It is a variable'; # intval will return 0 or false since it has a letter

В некоторых случаях intval возвращает первое целое число в строке, если оно установлено в «5b»

0 голосов
/ 21 ноября 2011

Рассмотрим что-то вроде этого:

$x = "50 O'Brien Family Members at a Bar";

Использование intval() даст вам "экранированное" значение

50

тогда как real_escape_string даст вам

50 O\'Brien Family Members at a Bar

real_escape_ STRING () следует использовать только там, где вы действительно хотите использовать строковое значение в запросе. Для всего остального используйте более подходящий инструмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...