Php 空格分隔MySQL字符串搜索
我被要求向客户端站点添加一个小的AJAX特性。基本上我有一个MySQL表,有3个字段:Php 空格分隔MySQL字符串搜索,php,mysql,sql,Php,Mysql,Sql,我被要求向客户端站点添加一个小的AJAX特性。基本上我有一个MySQL表,有3个字段: 身份证 产品 名字 该网站的理念是用户开始输入“名称”,产品在几下按键后就会显示出来。我的查询如下所示: $query = mysql_query("SELECT product FROM mytable WHERE name LIKE '%".$search."%'"); 除了“名称”中有空格外,一切正常。例如,如果我有一个名为“Coca-Cola”的名称,则当我键入“Coca”时,脚本会成功列出产品
- 身份证
- 产品
- 名字
$query = mysql_query("SELECT product FROM mytable WHERE name LIKE '%".$search."%'");
除了“名称”中有空格外,一切正常。例如,如果我有一个名为“Coca-Cola”的名称,则当我键入“Coca”时,脚本会成功列出产品,但只要我键入空格,它就不再返回任何行
我到处寻找解决办法。我知道空间被解释为某种分隔符,但我能让数据库将空间解释为。。。好。。。空间?如果没有,有没有更好的方法来完成我想完成的事情
编辑:
我在PHPMyAdmin中运行了它,它实际上返回了正确的结果,这让我相信它一定是PHP中的某种东西。全文如下:
$search = $_GET['search'];
$already_echoed = array();
if (!ereg('[^A-Za-z0-9]', $search) && strlen($search) > 2) {
$query = mysql_query("SELECT product FROM mytable WHERE name LIKE '%".$search."%'");
if (mysql_num_rows($query) > 0) {
echo '<h4>Suggestions:</h4><ul>';
while ($product = mysql_fetch_array($query)) {
if (!in_array($product['product'], $already_echoed)) {
$getProduct = mysql_query("SELECT name, shortname FROM products WHERE id='".$product['product']."'");
$product2 = mysql_fetch_array($getProduct);
echo '<li><a href="http://' . $product2['shortname'] . '.mydomain.com">' . $product2['name'] . '</a></li>';
$already_echoed[] = $product['product'];
}
}
echo '</ul>';
}
}
$search=$\u GET['search'];
$ready_echead=array();
如果(!ereg(“[^A-Za-z0-9]”,$search)和&strlen($search)>2){
$query=mysql\u query(“从mytable中选择产品,名称类似“%”“$search.”%”;
if(mysql_num_rows($query)>0){
回应“建议:”;
while($product=mysql\u fetch\u数组($query)){
如果(!在数组中($product['product'],已回送$U)){
$getProduct=mysql_查询(“从产品中选择名称,短名称,其中id=””。$product['product'].“”);
$product2=mysql\u fetch\u数组($getProduct);
回音“”;
$ready_回声[]=$product['product'];
}
}
回声“
”;
}
}
看起来您正在从允许的字符列表中排除空格。我不会说很多PHP,也不会被激怒去看文档。我很确定我不相信会发生这样的事情<代码>'%Coca%'应与可口可乐相匹配。你确定没有其他处理程序在进行吗?您能打印出一个实际执行的示例查询吗?您是否尝试过手动运行该查询?要确定它是SQL还是其他东西?除了任何额外的编码,产品本身可能(极有可能)存储为
Coca\tCola
,甚至Coca\r\nCola
。因此,也许您应该将任何非字母搜索字符串字符转换为%
。ereg不久前就被弃用了
!ereg('[^A-Za-z0-9]', $search