我正在尝试更正已经双重转义的数据库中的条目。我相信当使用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.com上列为不正确:
要搜索“\”,请将其指定为“\\\\”;这是因为解析器会将反斜杠剥离一次,并且在进行模式匹配时再次剥离反斜杠,只留下一个反斜杠。
答案 0 :(得分:5)
当我使用php运行命令时,此命令适用于我:
select * from exampletable where title like '%\\\\\\\\%' or title like '\\\\\\\\%' or title like '%\\\\';
我包括开头,任何地方和结束比赛的原因是为了表明它们是不同的。如果你在最后寻找反斜杠,那么只需要4个反斜杠。这是因为没有什么可以逃脱它。你在其他命令上使用8个反斜杠,因为它们会被php解析。
答案 1 :(得分: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)
答案 2 :(得分:0)
尝试:
SELECT title FROM exampletable WHERE title LIKE '%\\%'
答案 3 :(得分:0)
在Ruby on Rails的情况下
search_value.gsub!(/\\/, "\\\\\\\\\\")
MyModel.where(["column_name ?","%#{search_value}%"])
如果您不想使用外卡,请添加它们。
search_value.gsub!(/%/, "\\%").gsub!(/_/, "\\_")