我有一列包含字符串父亲节如果只搜索单词父亲查询显示结果父亲节但如果输入字符串父亲节父亲节
无结果显示
我的查询是
select * from temp where title like '%Father's%' datatype = 0
select * from temp where title like '%Father''s%' datatype = 0
select * from temp where title like '%Father\'s%' datatype = 0
我有一列包含字符串父亲节如果只搜索单词父亲查询显示结果父亲节但如果输入字符串父亲节父亲节
无结果显示
我的查询是
select * from temp where title like '%Father's%' datatype = 0
select * from temp where title like '%Father''s%' datatype = 0
select * from temp where title like '%Father\'s%' datatype = 0
使用mysql_real_escape_string转义特殊字符,
$search = mysql_real_escape_string($search);
使用 PDO 方式:
$stmt = $db->prepare("SELECT * FROM `temp` WHERE `title` LIKE ?");
$stmt->bindValue(1, "%$search%", PDO::PARAM_STR);
$stmt->execute()
注意: 请不要mysql_*
在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDO或MySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程。
您的查询
'
在LIKE
模式内转义(只有%
和_
被转义)我相信,但我没有检查的正确查询应该是:
select * from temp where title like "%Father's%" AND datatype = 0
使用这个肯定会起作用:
select * from temp where title like "%Father\\'s%" datatype = 0;
这将起作用。
并且据您所知,我想建议您,当您将其插入数据库时,请始终使用stripslashes函数来避免使用斜线。