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 和准备好的语句。
附加说明
结论
使用上面演示的准备好的语句总是比诉诸 mysql_* 函数更安全。 PDO 的内置保护机制提供了更强大、更安全的方法来防止 MySQL 注入。
以上是如何使用 PDO 预准备语句防止 MySQL 注入:是否存在与 mysql_real_escape_string() 等效的 PDO?的详细内容。更多信息请关注PHP中文网其他相关文章!