我有一个搜索表单,用户应该输入一个单词。到现在它工作得很好,但是当我输入一个包含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
并且查询返回甚至与core 2 dou
匹配,甚至添加了像
core 2 dou computers
我确定问题是以php的方式发送查询或处理它我只是想弄清楚
答案 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));