Что делает bind_param?

Я учусь избегать инъекций 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

Ответы на вопрос(2)

Ваш ответ на вопрос