Я учусь об исключении SQL-инъекций, и я немного смущен.Что делает bind_param?
При использовании bind_param я не понимаю цели. На странице вручную, я нашел этот пример:
$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
Теперь, предполагая, что эти 4 переменные были введены пользователем, я не понимаю, как это предотвращает инъекции SQL. По моему мнению, они все еще могут вводить все, что захотят.
Я также не могу найти объяснение для 'sssd'
. Что оно делает? Это то, что делает его безопасным?
Заключительный вопрос: Я прочитал по другому вопросу, что mysqli_real_escape_string
устарел, но он не говорит об этом в руководстве. Как он устарел? Не может ли он почему-то избежать специальных символов?
Примечание: Этот вопрос объясняет, что делает bind_param, но я до сих пор не понимаю, почему он безопаснее или более защищен. Bind_param explanation
'sssd' переводит строку, строку, строку, двойную. «По моему мнению, они все еще могут вводить туда, где они хотят». Правильно. Но SQL не анализируется в этих четырех переменных. –
По ссылке, которую вы отправили, вы забыли прочитать http://www.php.net/manual/en/mysqli-stmt.bind-param.php, которая подробно описывает строку 'types A, содержащую один или несколько символов, которые определяют типы для соответствующих переменных связывания: ' – Prix
@DaveChen« SQL не разбирается »Это означает, что они все равно могут вставлять SQL, он просто не будет прочитан как SQL, правильно? Означает ли это, что если бы у меня не было проверки формы, они могли бы просто ввести команды SQL в мою базу данных/в поле, но это не имело бы значения, потому что SQL не анализируется? – EveyPortman