O que o bind_param realiza?

Estou aprendendo sobre como evitar injeções de SQL e estou um pouco confuso.

Ao usar bind_param, não entendo o propósito. Na página de manual, encontrei este exemplo:

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

Agora, supondo que essas 4 variáveis ​​foram inseridas pelo usuário, não entendo como isso impede as injeções de SQL. Pelo meu entendimento, eles ainda podem inserir o que quiserem lá.

Eu também não consigo encontrar uma explicação para o'sssd' lá. O que isso faz? É isso que faz com que seja seguro?

Pergunta final: Eu li em outra pergunta quemysqli_real_escape_string está obsoleto, mas não diz isso no manual. Como está depreciado? Não pode mais escapar de caracteres especiais por algum motivo?

Nota: Esta questão explicou o que o bind_param faz, mas eu ainda não entendo porque é mais seguro ou protegido.Explicação de Bind_param

questionAnswers(2)

yourAnswerToTheQuestion