Должны ли числа из пользовательского ввода указываться в запросах MySQL, чтобы избежать атак с использованием SQL-инъекций?
Скажем, у меня на странице есть форма с указанием чьего-либо возраста.Они вводят свой возраст и нажимают «отправить».Следующий php-код имеет дело с отправкой формы: (age - это поле int в таблице db.)
$Number = mysqli_real_escape_string($dbc, $_POST["age"]);
$Query = "INSERT INTO details (age) VALUES ($Number)";
$Result = mysqli_query($dbc, $Query);
Вместо этого можно получить что-нибудь, чтобы заключить пользовательский ввод в одинарные кавычки,хотя это не строка?Примерно так:
...
$Query = "INSERT INTO details (age) VALUES ('$Number')"; <-- quotes
...
А как насчет выполнения SELECT
?Является ли это:
$ID = mysqli_real_escape_string($dbc, $_POST["id"]);
$Query = "SELECT * FROM users WHERE id = '$ID'";
$Result = mysqli_query($dbc, $Query);
лучше, чем:
$ID = mysqli_real_escape_string($dbc, $_POST["id"]);
$Query = "SELECT * FROM users WHERE id = $ID"; <-- no quotes
$Result = mysqli_query($dbc, $Query);
ПРИМЕЧАНИЕ. Мне известны подготовленные операторы, и я обычно использую их вместо объединения строк, но это устаревший кодЯ имею дело сЯ хочу обеспечить его как можно лучше.