mysql_real_escape_string() はカスタムプリペアドステートメントで安全に使用できますか?

Patricia Arquette
リリース: 2024-11-19 06:04:02
オリジナル
818 人が閲覧しました

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;
}
ログイン後にコピー

このアプローチに従って、SET NAMES/SET CHARACTER SET を回避します。を使用すると、mysql_real_escape_string() を効果的に利用して、SQL クエリをインジェクションから保護できます。

以上がmysql_real_escape_string() はカスタムプリペアドステートメントで安全に使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート