如何在SQL中使用单引号检查名称?

时间:2012-03-14 11:16:00

标签: php mysql

我使用以下代码从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'

我该如何解决这个问题?。

7 个答案:

答案 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"

这对我有用

我认为\'可能更好,但两者都有效