0

MySQL データベースにいくつかの特殊文字が保存されています。具体的には®。これらの文字を含むすべてのエントリを選択したい。私は現在、このステートメントを使用しています:

mysql_query("SELECT * FROM table WHERE description LIKE '%®%' OR name LIKE '%®%'");

0 エントリを返します。%a% で何かを試してみると、たくさん返されるので、すべてが正しいことがわかります。これは、ある種の文字セットの問題か何かです。

「®」をエコーすると、「å¨」が返されます。

また、phpmyadminでまったく同じクエリを実行すると、正しく機能します。助けてください!

4

1 に答える 1

1

これを読んで、あなたに完全に役立ちます

これらの記号をテキストに追加し、SQL クエリとして実行するだけです。

INSERT INTO tbl_name VALUES ("Here's my text: ©®");

それを表示したいとき、ウェブサイトはこれらの記号で何もしません (ただし、XML/SGML (HTML) ドキュメントでは特別な意味を持つため、少なくとも <、>、& を (htmlspecialchars() を使用して) エスケープすることを忘れないでください)

PS。また、SQL インジェクションの問題を回避するために、mysql_real_escape_string() を使用して SQL クエリに渡されるテキストをエスケープすることを忘れないでください。サーバーで magic_quotes_gpc が有効になっている場合は、それを無効にするか、少なくとも GET/POST/COOKIE データを生の値にフィルターします。常に意識的に値をエスケープする必要があります。編集:

あなたのコメントによると... magic_quotes_gpc がデフォルトで有効になっているかどうかは覚えていませんが、魔法の引用効果を簡単に取り消すことができます。PHPコードの最初に、次のようなものを追加してください。

if (get_magic_quotes_gpc()) {
  array_walk_recursive($_GET, 'stripslashes');
  array_walk_recursive($_POST, 'stripslashes');
  array_walk_recursive($_COOKIE, 'stripslashes');
}

これで、各 GPC 値は常に未加工 (引用符なし) である必要があるため、変数をクエリに渡す前に手動でエスケープする必要があります。

于 2012-08-03T17:37:43.193 に答える