首頁 >後端開發 >php教程 >mysql_real_escape_string() 可以安全地與自訂準備語句一起使用嗎?

mysql_real_escape_string() 可以安全地與自訂準備語句一起使用嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-19 06:04:02856瀏覽

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