¿Qué logra bind_param?

Estoy aprendiendo a evitar las inyecciones de SQL y estoy un poco confundido.

Al usar bind_param, no entiendo el propósito. En la página del manual, encontré este ejemplo:

$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;

Ahora, asumiendo que esas 4 variables fueron ingresadas por el usuario, no entiendo cómo esto evita las inyecciones de SQL. Según tengo entendido, todavía pueden ingresar lo que quieran allí.

Tampoco puedo encontrar una explicación para el'sssd' ahí. ¿Qué hace? ¿Es eso lo que lo hace seguro?

Pregunta final: leí en otra pregunta quemysqli_real_escape_string está en desuso, pero no lo dice en el manual. ¿Cómo está en desuso? ¿No puede escapar a los caracteres especiales por alguna razón?

Nota: esta pregunta explica qué hace bind_param, pero aún no entiendo por qué es más seguro o está más protegido.Explicación Bind_param

Respuestas a la pregunta(2)

Su respuesta a la pregunta