在某些 PHP 代码中,我有一个 mysql_real_escape_string() 术语,例如 foo\'s
。我在我的数据库中搜索它(它也存储为 foo\'s
),如下所示:
mysql_query("SELECT * FROM coupons WHERE retailerName LIKE '%" . $searchTerm . "%'");
没有变量的查询应该是这样的:
SELECT * FROM coupons WHERE retailerName LIKE '%foo\'s%'
如果我搜索 f
、fo
或 foo
,则搜索有效。但是,如果我搜索 foo's
,则搜索不起作用(请记住,实际查询采用转义字符串,因此所有内容都应匹配)。
最佳答案
也许您编程到 mysql(JDBC 或类似)的接口(interface)正在向您的字符串添加额外的转义字符。如果将数据放入数据库的机制不是同一机制,请尝试插入以查看数据是如何存储的。
Mysql可以通过自己的接口(interface)处理查询
mysql> describe test_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col1 | varchar(20) | YES | | NULL | |
| col2 | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> insert into test_table (col1, col2) values ('col1value', 'foo\'s');
Query OK, 1 row affected (0.04 sec)
mysql> select * from test_table where col2 like '%foo\'s%';
+-----------+-------+
| col1 | col2 |
+-----------+-------+
| col1value | foo's |
+-----------+-------+
1 row in set (0.00 sec)
关于php - MySQL转义字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228998/