Из документации PHP для функции (http://php.net/mysql_real_escape_string), говорится, что «mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратный слеш к следующим символам: \ x00, \ n, \ r, \, ',"и \ x1a." Таким образом, его полезность зависит от контекста. Так, например, если бы у вас был следующий сценарий:
$user_input = mysql_real_escape_string($_GET['user_input']);
$query = "SELECT * FROM `users` WHERE `id` = $user_input";
$result = mysql_query($query);
Ну, это было бы довольно глупо. Потому что, если строка была 0 or 9=9
, то это не содержит никаких символов, которые экранирует функция.Однако при введении в литерал $ query он выдает:
$query = "SELECT * FROM `users` WHERE `id` = 0 or 9=9";
Это вернет все строки в таблице users
...... Что, вероятно, не является намерением программиста.
Итак, для суммирования, если пользовательский ввод обрабатывается mysql_real_escape_string (), но используется в контексте целого или другого числатип данных, тогда он не сможет обеспечить достаточную защиту.
С помощью подготовленных операторов вы можете убедиться, что каждое значение не только экранировано, но проверено на правильность типа данных.
В приведенном выше примере самый безопасный способ обработки - использование функции intval () вместо функции mysql_real_escape_string ().
Надеюсь, что это имело смысл.