mysql_real_escape_string() 是否存在致命缺陷?
尽管声称其不可靠,但 mysql_real_escape_string() 仍然是创建您自己的准备好的语句的宝贵工具。下面详细介绍了它的功能以及如何有效地使用它。
mysql_real_escape_string() 解释
MySQL C API 文档指出:“如果您需要更改字符设置连接,您应该使用 mysql_set_character_set() 函数而不是执行 SET NAMES (或 SET CHARACTER SET) 语句。”
这意味着要正确使用 mysql_real_escape_string(),您应该使用 mysql_set_charset()。 PHP 的 mysql_set_charset() 镜像 MySQL 的 mysql_set_character_set()。
证明代码
<?php $mysqli = new mysqli("localhost", "username", "password", "database"); // Set the character set using mysql_set_charset() $mysqli->set_charset("utf8mb4"); // Prepared statement using mysql_real_escape_string() $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt->bind_param('s', mysql_real_escape_string($_GET['username'])); $stmt->execute(); ?>
在此示例中,mysql_set_charset() 确保连接使用 utf8mb4 字符集。这允许 mysql_real_escape_string() 正确处理可能容易受到 SQL 注入攻击的字符。
结论
虽然了解 mysql_real_escape_string() 的限制很重要,但使用它与 mysql_set_charset() 结合使用可以让您有效地创建自己的准备好的语句。通过采取这些步骤,您可以降低 SQL 注入的风险并维护应用程序的安全性。
以上是`mysql_real_escape_string()` 真的有缺陷,还是只是被误解了?的详细内容。更多信息请关注PHP中文网其他相关文章!