空格分隔MySQL字符串搜索
问题描述:
我被要求向客户端添加一个小AJAX功能。基本上我有3场一个MySQL表:空格分隔MySQL字符串搜索
- ID
- 产品
- 名
该网站的想法是,用户开始输入“姓名”,产品在几次击键后出现。我的查询如下所示:
$query = mysql_query("SELECT product FROM mytable WHERE name LIKE '%".$search."%'");
一切正常,除非在“名称”中有空格。例如,如果我有一个名为“可口可乐”的名称,那么当我键入“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>';
}
}
答
!ereg('[^A-Za-z0-9]', $search
你看上去不包括字符的允许列表空间。我不会说太多的PHP,也不能去看看文档。
我很确定我不相信那是发生了什么事。 “可口可乐%”应该匹配“可口可乐”。你确定没有其他处理?你能打印出一个实际执行的示例查询吗? – 2011-01-13 11:09:25