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