首页 >后端开发 >php教程 >mysql_real_escape_string() 可以安全地与自定义准备语句一起使用吗?

mysql_real_escape_string() 可以安全地与自定义准备语句一起使用吗?

Patricia Arquette
Patricia Arquette原创
2024-11-19 06:04:02870浏览

Can mysql_real_escape_string() Be Used Safely with Custom Prepared Statements?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn