mysql_real_escape_string() 是否存在不可修复的缺陷?
一些怀疑论者认为 mysql_real_escape_string() 函数存在根本性缺陷,无法可靠地保护 SQL 查询。他们指出过时的文章作为证据。
它可以用于自定义准备语句吗?
尽管有这些担忧,仍然可以利用 mysql_real_escape_string() 来创建自定义准备的语句。但是,它需要仔细注意字符集处理。
解决方案:
根据 mysql_real_escape_string() 的 MySQL C API 文档,您应该使用 mysql_set_character_set() 来设置字符集。这确保它也会影响 mysql_real_escape_string() 使用的字符集。
代码示例:
#include <mysql.h> int main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
通过遵循此方法并避免设置名称/设置字符集,您可以有效地利用 mysql_real_escape_string() 来保护您的 SQL 查询免受注入。
以上是mysql_real_escape_string() 可以安全地与自定义准备语句一起使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!