PHP / SQL处理特殊字符(PHP初学者)

时间:2016-04-21 07:44:50

标签: php mysql sql

我正在尝试在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;)

2 个答案:

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