查询具有多个空格的短语不会返回任何内容

时间:2011-08-14 05:08:46

标签: php mysql search

我有一个搜索表单,用户应该输入一个单词。到现在它工作得很好,但是当我输入一个包含2个或更多空格的单词时,查询将返回none(空)。

    $search = $_POST['srch'];

    if (!$search == "")
    {
    $con = mysql_connect('nnnnn', 'nnnnn', 'nnnn');
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    mysql_select_db("nnnnnnn", $con);
    $search = mysql_real_escape_string($search);

    $sql = "SELECT * FROM `computers` WHERE `MODEL` REGEXP '$search|$search\$' OR
    `DESCR`\n"
        . "REGEXP '^$search|$search\$' LIMIT 0, 30 ";
    // here check if there is any content
if (mysql_fetch_array($result))

{

while($row = mysql_fetch_array($result))

{// here just echoing the returned content 

}

}else echo "not found";

    }echo "enter a word"! ;

因此,如果我输入core 2,它会重新计算所有匹配的结果。

但如果我写core 2 dou它不会返回任何内容,甚至不会返回“未找到错误”。

我该如何解决这个问题?

我通过替换$search

尝试了PHPMyAdmin

并且查询返回甚至与core 2 dou匹配,甚至添加了像

这样的混乱单词

core 2 dou computers

我确定问题是以php的方式发送查询或处理它我只是想弄清楚

2 个答案:

答案 0 :(得分:1)

您需要将模式括在引号中。而你有

"... REGEXP ^$search|$search\$ ..."

你需要

"... REGEXP \"^$search|$search\$\" ..."

此外,您应该至少使用$search转义mysql_real_escape_string,除非您希望网站访问者能够run random SQL against your database

答案 1 :(得分:0)

由于您说过任何帮助都会受到赞赏,如果您只想搜索字符串,更简单的方法是使用LIKE而不是REGEXP,例如,

MODEL LIKE '%$search%'

另外,我不确定你为什么要用'|'

重复$ search

顺便说一下,如果有多个空格是问题,很容易用单个空格替换,如下所示:

$search = implode(' ', preg_split("/\s+/", $search));