¿Son suficientes las consultas preparadas de PDO para protegerse contra la inyección SQL?
Hola a todos. Soy un desarrollador PHP principiante y tengo una pregunta seria sobre seguridad. He leído muchos artículos que dicen que usar PDO con consultas preparadas (prepared statements) resuelve completamente el problema de la inyección SQL. Pero, honestamente, estoy un poco confundido.
Por ejemplo, escribo código como este:
<?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. Pero he visto advertencias de que PDO no siempre protege, especialmente si se usa incorrectamente. Por ejemplo, ¿qué pasa si inserto datos en la consulta usando query() o si uso bindParam() con el tipo incorrecto? ¿Y qué hay de los casos en los que construyo dinámicamente la consulta, por ejemplo, añadiendo ordenamiento o LIMIT? ¿Hay trampas ocultas?
Pued