使用PDO预处理语句是否足以防御SQL注入?
大家好。我是一名初学PHP的开发者,有一个关于安全性的严重问题。我读过很多文章,说使用PDO的prepared statements可以完全解决SQL注入问题。但说实话,我有点困惑。
例如,我编写了这样的代码:
<?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();
?>
看起来一切安全。但我看到过警告,说PDO并不总是能保护,尤其是使用不当时。例如,如果我通过query()插入数据,或者使用bindParam()时指定了错误的类型,会发生什么?还有,当我动态构建查询时,比如添加排序或LIMIT,是否有陷阱?
你们能