Une requête préparée sépare le SQL des valeurs : on écrit la requête avec des paramètres (:nom ou ?), on la prépare avec prepare, puis on l'exécute avec execute en passant les valeurs. La base traite ces valeurs comme des données, jamais comme du SQL.
Exemple
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);