Que fait bind_param?

Je suis en train d'apprendre sur la façon d'éviter des injections SQL et je suis un peu confus.

Lors de l'utilisation de bind_param, je ne comprends pas le but. Sur la page du manuel, j'ai trouvé ça par exemple:

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

Maintenant, en supposant que ces 4 variables ont été utilisateur renseigné, je ne comprends pas comment cela empêche les injections SQL. Selon ma compréhension, ils peuvent toujours entrer tout ce qu'ils veulent.

Je ne peux pas trouver une explication à la 'sssd'. Que faut-il faire? C'est que ce qui le rend sûr-er?

Dernière question: j'ai lu sur une autre question que mysqli_real_escape_string est obsolète, mais cela ne veut pas dire que dans le manuel. Comment est-elle obsolète? Ne peut-il pas échapper les caractères spéciaux de plus pour une raison quelconque?

Remarque: Cette question a expliqué ce bind_param fait, mais je ne comprends toujours pas pourquoi il est plus sûr ou plus protégés.
Bind_param explication

source d'informationauteur EveyPortman