从mysql_*过渡到PDO的过程中,你可能会遇到缺少与mysql_real_escape_string直接等价的东西的困境。
没有直接等价物
从技术上来说,有 PDO::quote(),但它的使用是有限的。真正的解决方案在于正确实现准备好的语句。
准备好的语句防止注入
PDO 与准备好的语句一起使用时,本质上可以防止 MySQL 注入,而无需需要额外的转义。预准备语句将输入参数绑定到占位符,防止恶意输入被解释为 SQL 命令。
示例:在 PDO 中使用预准备语句
以下代码演示了安全数据库使用准备好的语句进行查询:
false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
if ($_POST && isset($_POST['color'])) {
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
$stmt->execute(array($_POST['color']));
$cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
var_dump($cars);
}
?>
准备语句的好处
其他注意事项
结论
PDO 中的准备语句为数据库查询提供了强大且安全的机制,而不需要像 mysql_real_escape_string 这样的函数。通过采用这种方法,您可以有效防止 SQL 注入并保持数据的完整性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3