我使用以下代码从DB检查 lastname(区分大小写)。
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'ravi'
工作正常。但是,当下面的名称时,它不起作用,我使用 php变量($ lname)传递这个姓氏。
SELECT * FROM $table_name WHERE BINARY LastName LIKE '$last_name'
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O'Connor'
我该如何解决这个问题?。
答案 0 :(得分:2)
您需要使用单引号转义所有单引号:
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O''Connor'
答案 1 :(得分:2)
这应该有效。
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O\'Connor'
当然,对于php,你有mysql_escape或所有PDO预处理语句,它会自动处理这个,因为你使用的LIKE值被绑定到php变量。
答案 2 :(得分:1)
当您在PHP脚本中构建查询时,请在您要搜索的值上使用addslashes函数:
$query = "SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE '" . addslashes($name) . "'"
这将转义任何需要它的字符,并产生您正在寻找的结果。
另一个解决方案是在查询中使用双引号而不是单引号:
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE "O'Connor"
但我认为我更喜欢第一种解决方案
答案 3 :(得分:0)
你可以自己编写一个使用正则表达式来匹配引号的程序,该程序可以验证并修复用户所犯的错误。
答案 4 :(得分:0)
您应该使用mysql_real_escape_string()
如果你打开了magic_quotes_gpc(你应该知道这是一个坏主意)。这意味着从$ _GET,$ _POST和$ _COOKIES收集的字符串将被转义(即“O'Connor” - >“O \'Connor”)。
存储数据并随后再次检索数据后,您从数据库中返回的字符串将不会自动为您转义。你会回来“奥康纳”。因此,您需要通过mysql_real_escape_string()
传递它答案 5 :(得分:-1)
SELECT * FROM sometable where LastName LIKE '%''%'
答案 6 :(得分:-1)
WHERE BINARY LastName LIKE "O'Connor"
这对我有用
我认为\'
可能更好,但两者都有效