我正在尝试在php中构建一个简单的搜索功能,用于搜索SQL数据库中的值。
到目前为止,我的代码似乎工作正常,但是我对特殊字符有一些问题。例如,我没有得到任何搜索结果,据我所知,搜索是在没有调用die命令的情况下执行的。
$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%$input%';")
or die("Could not search");
我认为问题是$input
是一个字符串,可以包含像& b这样的内容。我该如何处理这个?
此外,数据库包含一些法语单词,因此我必须处理所有é,ç,ô
等。如何确保数据库中包含特殊字符的输出(例如hôtel
)是通过php正确显示?
更新
在花了好几个小时试图找出问题所在之后,我发现了一些可能出问题的迹象。最初我曾经认为逃避造成了问题,但事实并非如此......
我的代码创建了一个字符串$query_in
,然后使用
mysql_query($query_in);
我回复了$query_in
字符串进行调试:
SELECT * FROM table WHERE attribute1 LIKE
"%a & b%" OR attribute2 LIKE "%a & b%" OR
attribute3 LIKE "%a & b%" OR attribute4
LIKE "%Ta & b%" OR attribute5 LIKE "%a & b%"
OR attribute6 LIKE "%a & b%"
如果我在phpMyadmin界面中手动运行(复制和粘贴)此查询,它可以正常工作,我得到了结果。但是,当我使用以下命令检查数据库中的空返回值时:
$count = mysql_num_rows($query);
echo $count
返回0
怎么会这样?另外,请放心,我会在修复之后将其切换到msqli;)
答案 0 :(得分:0)
尝试使用utf8_encode
$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%".utf8_encode($input)."%';") or die("Could not search");
或添加此行与数据库连接,
mysql_set_charset("utf8", $database_name);
建议:不要使用mysql,现在已弃用。
答案 1 :(得分:0)
处理特殊字符使用addlash或mysql转义函数
$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%" . addslashes($input) . "%';") or die("Could not search");
OR
$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%" . mysql_real_escape_string($input) . "%';") or die("Could not search");