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中文網其他相關文章!