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 username = :username");
$stmt->execute([':username' => $_GET['username']]);
$user = $stmt->fetch();
```
我认为这是安全的,因为我使用了占位符(placeholders)。但后来我在一个旧项目中看到了这样的代码:
```php
$pdo->query("SELECT * FROM users WHERE id = " . $_GET['id']);
```
于是我开始思考:如果我在某个地方不小心忘记使用预处理查询怎么办?或者我使用了PDO,但错误配置了预处理查询的模拟(emulation)?攻击者能否绕过PDO的保护?
我还听说过动态查询(dynamic queries)……