如何使用 PDO 预准备语句防止 MySQL 注入:是否存在与 mysql_real_escape_string() 等效的 PDO?

DDD
发布: 2024-10-26 07:58:03
原创
921 人浏览过

How to Prevent MySQL Injection with PDO Prepared Statements: Is There a PDO Equivalent to `mysql_real_escape_string()`?

mysql_real_escape_string() 的 PDO 等效项

在从 mysql_* 到 PDO 的代码迁移中,您正在寻找 mysql_real_escape_string() 的等效项。然而,需要注意的是,PDO 中没有直接等效的函数。

从技术上讲,PDO::quote() 是存在的,但它并不常用,并且与 mysql_real_escape_string() 不具有可比性。

正确的 MySQL 注入预防

当适当地将 PDO 与准备好的语句一起使用时,您可以获得针对 MySQL 注入的保护。准备好的语句可以清理您的输入,无需使用 mysql_real_escape_string() 等函数。

使用准备好的语句的安全数据库查询示例

这是一个安全数据库的示例使用 PDO 准备好的语句进行查询:

$db = new PDO(
    "mysql:host=localhost;dbname=xxx;charset=utf8",
    "xxx",
    "xxx",
    [
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]
);

// Prepared statement
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");

// Execute statement
$stmt->execute(array($_POST['color']));

// Fetch result
$cars = $stmt->fetchAll(PDO::FETCH_ASSOC);
登录后复制

如您所见,我们没有转义或清理 $_POST['color'],但由于 PDO 和准备好的语句。

附加说明

  • 为了安全起见,请始终在 DSN 中传递 charset=utf8。
  • 启用 PDO 将错误显示为异常为了更好的错误处理。
  • 对于过时的 MySQL 版本(

结论

使用上面演示的准备好的语句总是比诉诸 mysql_* 函数更安全。 PDO 的内置保护机制提供了更强大、更安全的方法来防止 MySQL 注入。

以上是如何使用 PDO 预准备语句防止 MySQL 注入:是否存在与 mysql_real_escape_string() 等效的 PDO?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!