2013-02-28 31 views
0

{当我执行此查询它返回空的结果,但结果是保存在与enter code here名数据基地是d \”阿米使用“在MySQL中喜欢接近

SELECT u.UserFirstName, u.UserLastName, u.UserHasLoginAccess, u.UserEmail 
FROM Users u 
WHERE u.UserLicenseID = '1603' 
AND TRIM(u.UserEmail) != '' 
AND (
u.UserEmail LIKE "%D\'Ami%" 
OR u.UserFirstName LIKE "%D\'Ami%" 
OR u.UserLastName LIKE "%D\'Ami%" 
OR CONCAT_WS( ' ', u.UserFirstName, u.UserLastName) LIKE "%D\'Ami%" 
) 
LIMIT 0 , 50} 
+0

http://www.sqlfiddle.com/#!2/36c375/2 – 2013-02-28 09:07:10

回答

0

当你想搜索使用查询的单引号,您必须用另一个单引号将其转义,而不是\。例如

u.UserEmail LIKE "%D''Ami%" 
OR u.UserFirstName LIKE "%D''Ami%" 
OR u.UserLastName LIKE "%D''Ami%" 
OR CONCAT_WS( ' ', u.UserFirstName, u.UserLastName) LIKE "%D''Ami%" 

作为旁注,查询是用SQL Injection脆弱,如果变量的值(小号)从外部来了。请看下面的文章,了解如何防止它。通过使用PreparedStatements你可以摆脱使用单引号围绕值。

+0

感谢您对数据的基础上名字的答复是实际以此格式保存d \',但阿美当我在类似查询中使用它不返回任何结果我的问题是如何写返回结果与名称D \'Ami – 2013-02-28 09:05:28

+0

其实它在这里工作http://www.sqlfiddle.com/#!2/36c375/ 2 – 2013-02-28 09:10:13