Php Mysql查询Row中的特殊字符

时间:2014-12-23 06:43:22

标签: php mysql

在我的Db中我喜欢这样的话:

mysql> select * from link;
 +------------------------+-------+
 | album                  |  id   |
 +------------------------+-------+
 | Kakki_Sattai           |   1   |
 | pk (2014)              |   2   | 
 | Kakki Sattai           |   3   |
 | pk                     |   4   |
 +------------------------+-------+

$query = $_GET['query']; 
$query = htmlspecialchars($query); 
$query = mysql_real_escape_string($query);

$raw_results = mysql_query("SELECT * FROM link WHERE (`album` LIKE '%".$query."%')");

如果我使用:

 If query = pk     // Result: pk, pk (2014)                --- Workig Fine
 If query = Kakki  // Result: Kakki Sattai , Kakki_Sattai  --- Workig Fine   

但如果我使用:

 If query = pk 2014         // Result: No Result     ---( i want both result)
 If query = Kakki Sattai    // Result: Kakki Sattai  ---( Another result Not show)    

如何跳过mysql表中的特殊字符?

3 个答案:

答案 0 :(得分:2)

您可以将$query中的空格替换为%,以便他们匹配任何内容:

$query = str_replace(' ', '%', $query);

但是,如果查询为Sattai Kakki,它仍然无法匹配任何内容,因为订单与表格中的值不同。

答案 1 :(得分:1)

如果您不介意对查询字符串进行一些预处理,则可以使用'%'来替换其中的空格。字符。

因此,例如,转换" pk 2014"到" pk%2014"和" Kakki Sattai"到" Kakki%Sattai"。

编辑:@Taha Paksu提出了一个很好的观点。仅仅插入'%'进入" pk 2014"不会让你两行包含" pk"。为此,您还必须在空格上拆分查询字符串,并在查询中添加OR其他LIKE子句,测试在查询字符串中的空格之间找到的一个或多个离散单词。

但是,在实施解决方案之前,您可能需要花一些时间来分析您希望匹配的允许性或限制性。例如,如果您对查询字符串中的每个离散单词进行OR附加LIKE测试(例如,添加条款' OR album LIKE"%pk%" OR album LIKE"%2014 %"'到初始查询),您将获得所有其他记录" 2014"在专辑名称中,您可能不想要。

答案 2 :(得分:0)

您可以像这样使用查询拆分:

$query = $_GET['query']; 
$query = htmlspecialchars($query); 
$query = mysql_real_escape_string($query);
$query = implode('\' or `album` LIKE \'',explode(' ',$query));
$raw_results = mysql_query("SELECT * FROM link WHERE (`album` LIKE '%".$query."%')");