6

ダブルエスケープされたデータベースのエントリを修正しようとしています。mysql_real_escape_string が使用されている間、magic_quotes がオンになっていると思います。二重エスケープにより、一部の検索結果が正しくない/見つからないことがありました。

私は magic_quotes をオフにして、バックスラッシュでエントリを検索し、それらを更新して二重エスケープを削除することを計画しています。問題は、バックスラッシュを含むエントリを検索するクエリを実行すると、常に結果が得られないことです。

SELECT title FROM exampletable WHERE title LIKE '%\\\\%'

ここで推奨されているように、「%\\\\%」を使用しています: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

すべてのタイトルを出力すると、それらの多くに不要なバックスラッシュが含まれているため、そこにあることがわかります。クエリでそれらを分離することはできないようです。

Example Data:
Old King\'s Road
Running Down A Dream
Can\'t Stop The Sun
This One's For Me

繰り返しますが、\ を含むエントリを返そうとしています。


編集: MySQL のバージョンは 5.0.92-community です。照合順序は latin1_swedish_ci です。文字セットは UTF-8 Unicode です

%\\% 動作しません。私はもう試した。mysql.com では正しくないと記載されています。

「\」を検索するには、「\\\\」と指定します。これは、バックスラッシュがパーサーによって 1 回削除され、パターン マッチが行われたときに再び削除されるためです。

4

4 に答える 4

5

このコマンドは、phpでコマンドを実行しているときに機能します。

select * from exampletable where title like '%\\\\\\\\%' or title like '\\\\\\\\%' or title like '%\\\\';

最初、どこでも、最後の一致を含める理由は、それらが異なることを示すためです。最後に円記号を探している場合は、4つの円記号があれば十分です。それ以降は逃げ場がないからです。他のコマンドはphpによって解析されるため、8つの円記号を使用します。

于 2012-10-31T21:55:50.977 に答える
2

MySQL 5.5.8では、クエリは正常に機能します。

mysql> create table exampletable (
  title varchar(255)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.15 sec)

mysql> 
mysql> insert into exampletable values ('Old King\\''s Road'),
  ('Running Down A Dream'),('Can\\''t Stop The Sun'),('This One''s For Me');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> 
mysql> select * from exampletable WHERE title LIKE '%\\\\%';
+---------------------+
| title               |
+---------------------+
| Old King\'s Road    |
| Can\'t Stop The Sun |
+---------------------+
2 rows in set (0.01 sec)
于 2011-04-11T19:08:59.300 に答える
0

試す:

SELECT title FROM exampletable WHERE title LIKE '%\\%'
于 2011-04-11T18:32:36.920 に答える