您可以依靠 mysql_real_escape_string() 来保护您的查询吗?
尽管使用正确,但人们仍然对 mysql_real_escape_string() 的可靠性提出了担忧。 )以防止 SQL 注入。为了阐明这个问题,让我们深入研究该函数的局限性及其创建自定义预准备语句的适用性。
证明代码和分析:
根据 MySQL 官方根据文档,mysql_real_escape_string() 的函数受连接字符集的影响。为了确保最佳性能,建议使用 mysql_set_character_set() 而不是 SET NAMES 或 SET CHARACTER SET 语句来修改字符集。
#include <mysql/mysql.h> int main() { // Create a MySQL connection MYSQL *conn = mysql_init(NULL); // Set the character set to UTF-8 using mysql_set_character_set() mysql_set_charset(conn, "utf8", MY_CS_PRIMARY); // Prepare a query using mysql_real_escape_string() char *query = mysql_real_escape_string(conn, "SELECT * FROM users"); // Execute the query mysql_query(conn, query); // Release memory free(query); mysql_close(conn); return 0; }
在此代码中,我们使用显式将字符集设置为 UTF-8 mysql_set_character_set(),确保 mysql_real_escape_string() 与正确的使用
结论:
虽然可能存在某些限制,但 mysql_real_escape_string() 仍然可以用来创建基本的准备好的语句。通过确保使用 mysql_set_character_set() 定义适当的字符集,您可以针对 SQL 注入保持所需的安全级别。
以上是mysql_real_escape_string() 真的能可靠地防止 SQL 注入吗?的详细内容。更多信息请关注PHP中文网其他相关文章!