Php Mysql查询行中的特殊字符

Php Mysql查询行中的特殊字符,php,mysql,Php,Mysql,在我的数据库中,我有这样一句话: mysql> select * from link; +------------------------+-------+ | album | id | +------------------------+-------+ | Kakki_Sattai | 1 | | pk (2014) | 2 | | Kakki Sattai

在我的数据库中,我有这样一句话:

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表中包含的特殊字符?

如果您不介意对查询字符串进行一些预处理,可以将其中的空格替换为“%”字符

例如,将“pk 2014”转换为“pk%2014”,将“Kakki Sattai”转换为“Kakki%Sattai”

编辑:@Taha Paksu提出了一个很好的观点。仅仅将“%”插入到“pk 2014”中并不能使两行都包含“pk”。为此,还必须将查询字符串中的空格和/或其他LIKE子句拆分到查询中,测试在查询字符串中的空格之间找到的一个或多个离散词


但是,在实现解决方案之前,您可能需要花一些时间分析您希望匹配的允许或限制程度。例如,如果您为查询字符串中的每个离散词添加或附加LIKE测试(例如,在初始查询中添加子句“或类似于“%pk%”的相册”或类似于“%2014%”的相册),您将获得相册名称中包含“2014”的所有其他记录,您可能不需要。

您可以将
$query
中的空格替换为
%
,这样它们就可以匹配任何内容:

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

但是,如果查询是Sattai Kakki,它仍然不会匹配任何内容,因为顺序与表中的值不同。

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

$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."%')");

LIKE
语句不会拆分单词并搜索每个单词。你可能想手工做。通过查询
pk 2014
,您无法找到
pk(2014)
。确定。。那我怎么能找到这两个呢?就像赫菲斯托斯说的。或者您可以使用拆分和分离的like子句。为什么要用HTML为SQL转义数据?您的数据库数据不应该是HTML转义的,请在显示时进行转义!另外,为什么在新代码中使用过时的
mysql
扩展?使用PDO或至少使用mysqli!并且不要在查询中插入值。使用参数化查询。不知道通配符也可以用于此类条件。。。!谢谢+1