Oi Karolina,
No site oficial tem uma explicação completa https://www.php.net/manual/pt_BR/security.database.sql-injection.php
O que é necessário saber é que existem formas de burlar uma consulta SQL e para evitar isso é necessário realizar o escape dos dados antes de passa-los para uma consulta, ou seja, retirar dos dados potenciais caracteres que possam afetar a consulta SQL original. Como o SQL injection é um truque muito famoso e corriqueiro não precisamos nos preocupar em fazer esse escape de maneira manual, pois, já existem muitas soluções já prontas, a exemplo usar a "?" fornecida pelo próprio PHP e comentada por você na pergunta inicial.
Um exemplo bem basicão, apenas pra você ter uma noção:
Digamos que vc tenha a consulta:
INSERT INTO usuarios (nome, admin) VALUES ($nome, '0')
No formulário do seu sistema você vai pedir o nome do usuário para que seja substituído na variável $nome
e inserido no banco.
O problema é que a pessoa em vez de passar o nome no formulário, ela pode passar uma consulta SQL e alterar aquele valor 0 para o valor 1 da coluna admin. No formulário a pessoa pode digitar:'Ricardo', '1') --
, e após substituir o que foi digitado na variável $nome, a consulta vai ficar dessa maneira:
INSERT INTO usuarios (nome, admin) VALUES ('Ricardo', '1') --, '0')
O duplo hifen -- é usado para desativar o restante de uma linha e transormar em comentário o que vem após, logo a consulta final será:
INSERT INTO usuarios (nome, admin) VALUES ('Ricardo', 1)
Bingo! Agora o valor de admin não é mais 0 e sim 1 e afetar todo seu sistema. Por isso é preciso retirar o hífen duplo, assim como outros caracteres especiais, dos dados antes de passa-lo para a consulta.
É um assunto muito extenso para o fórum, com certeza existem diversos vídeos no youtube ou em outros lugares na internet com demonstrações mais práticas e profundas, vale a pena dar uma pesquisada.
Bons estudos.