在从 mysql_* 转换到 PDO 的过程中,您可能会遇到缺少与 mysql_real_escape_string 直接等效项的困境。
没有直接等价物
从技术上讲,有 PDO::quote(),但它的使用是有限的。真正的解决方案在于正确实现准备好的语句。
准备好的语句防止注入
PDO 与准备好的语句一起使用时,本质上可以防止 MySQL 注入,而无需需要额外的转义。准备好的语句将输入参数绑定到占位符,防止恶意输入被解释为 SQL 命令。
示例:在 PDO 中使用准备好的语句
以下代码演示了一个安全的数据库使用预备语句进行查询:
<code class="php"><?php $db = new \PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [ PDO::ATTR_EMULATE_PREPARES => 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); } ?></code>
预备语句的好处
其他注意事项
结论
PDO 中的准备语句为数据库查询提供了强大且安全的机制,而不需要像 mysql_real_escape_string 这样的函数。通过采用这种方法,您可以有效防止 SQL 注入并保持数据的完整性。
以上是如何替换 PDO: 准备好的语句中的 mysql_real_escape_string 作为解决方案?的详细内容。更多信息请关注PHP中文网其他相关文章!