Avatar ·

Prepared queries PDO são suficientes para proteger contra SQL injection?

Olá a todos. Sou um desenvolvedor PHP iniciante e tenho uma dúvida séria sobre segurança. Li muitos artigos que dizem que usar PDO com prepared statements resolve completamente o problema de SQL injection. Mas, honestamente, estou um pouco confuso.

Por exemplo, escrevo um código assim:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $_POST['email']]);
$user = $stmt->fetch();
?>

Parece seguro. Mas vi alertas de que o PDO nem sempre protege, especialmente se usado incorretamente. Por exemplo, o que acontece se eu inserir dados na consulta usando query() ou se usar bindParam() com o tipo errado? E quanto aos casos em que construo a consulta dinamicamente, como adicionar ordenação ou LIMIT? Existem armadilhas?

Você pod