2016-04-21 68 views
2

我想在php中建立一个简单的搜索功能,搜索SQL数据库中的值。PHP/SQL处理特殊字符(PHP初学者)

我的代码似乎到目前为止工作正常,但我有一些特殊字符的问题。例如,就我所知,我没有得到任何搜索结果,因为没有调用die命令而执行搜索。

$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%$input%';") 
or die("Could not search"); 

我认为这个问题是$input是它可以包含的东西像& B A字符串。我如何处理这个?

此外,数据库包含一些法语单词,所以我必须处理所有é,ç,ô等。如何确保数据库中包含特殊字符的输出(例如hôtel)通过php正确显示?

UPDATE

花费数小时试图找出是什么问题后,我发现一些迹象表明,事情可能出错。起初我还以为逃逸造成的问题,这似乎并没有这样的情况?

我的代码创建一个字符串$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

应用这两个东西。 1-您需要将表格的排序规则定义为utf8_general_ci。你需要定义'mysql_set_charset('utf8');'在与数据库建立连接的文件中,在选择数据库(如'mysql_select_db')之后,使用'mysql_set_charset',这将允许您以任何语言正确添加和检索数据。之后,只需使用mysql_real_escape_string执行搜索,就可以得到所需的内容。干杯 –

+0

伙计们,伙计们!没有人在那里警告我们的年轻朋友[不要使用mysql_ *函数](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)? – giorgio

回答

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,现在不推荐使用它。

0

处理特殊字符使用addslash或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");