在我的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表中的特殊字符?
答案 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."%')");