Я учусь об исключении SQL-инъекций, и я немного смущен.
При использовании 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