PHP MySQL - 带空格的搜索字段

时间:2012-07-28 15:53:07

标签: php mysql search

这可能非常简单。我正在构建一个搜索工具。我有一个保存地址的varchar字段。例如:

2343 S Cherry Creek St.

所以我希望能够搜索部分或全部字段。我试过了

LIKE '%$address%' 

但最终在

中使用类型
"2343 S Cherry" 

它不返回任何结果。当用户只键入一个单词时,它可以工作:

"2343" 

返回正确的记录。所以这让我觉得它是关于不允许它搜索整个术语的空间。

有人可以告诉我如何构建它,以便最终用户可以使用多个单词搜索地址字段。我知道它与使用LIKE,%%有关,但我需要它来允许空格。

4 个答案:

答案 0 :(得分:1)

导入时出错。因此,导入数据库的地址是添加和额外空间。因此,当人们在单词之间搜索一个空格时,它返回0结果,因为数据库中的数据有两个空格。我修复了我的导入脚本,它现在正在运行。谢谢。

答案 1 :(得分:1)

问题不在于空格,而在于您如何通过PHP插入用户输入。

看看这个SQLFiddle Demo


也许问题在于,您似乎允许用户在输入中输入引号,以便他们可以对整个字符串执行搜索。

您要做的是取消PHP中的引号,然后将输入插入SQL语句或作为绑定参数:

$address = strtr($address, array('"' => '', "'" => ''));

这将删除字符串中的单引号和双引号。

答案 2 :(得分:0)

试试这个

$arr = explode(' ', $address);
if (count($arr)) {
    $query = "SELECT address FROM table WHERE address LIKE '%" . implode( "%' OR address LIKE '%", $arr) . "%' ";
}

答案 3 :(得分:0)

我建议以下

SELECT * FROM table WHERE REPLACE(address, ' ', '') LIKE REPLACE('%$address%', ' ', '');

这将使用非空格替换空格,以便您可以更紧密地匹配。