2012-03-29 73 views
0

在我正在处理的项目中,我需要一些帮助。在不知道用户输入是什么的情况下进行查询(SQL,PHP)

这里是我想要做的事:

我与MySQL和PHP网页上的工作。有一个输入字段,用户将输入一个位置(国家,城市,州),日期,比赛长度或比赛名称。问题是,他们可以输入这些项目的任何组合(就像你可以在谷歌中)。

之后,我必须查询数据库才能显示结果。这是我现在使用的查询:

LIKE '$str%' 
OR city LIKE '$str%' 
OR state LIKE '$str%' 
OR country LIKE '$str%' 
OR race_distancia LIKE '$str%' 

$ str是一个持有输入文本的php变量。

我正在使用'$ str%',因为它会使用我创建的索引,尽管由于正则表达式在最后添加了,因此无法正常工作。所以如果我输入例如:'迈阿密5k',它将不起作用。由于没有比赛被称为迈阿密5K,也没有一个位置......但是迈阿密有5克赫赫。

我在想空间上的输入文本爆炸和每个爆炸项目运行查询,然后删除重复的结果。这将工作,但我试图找到最有效的解决方案,我不确定如何避免重复的项目。

感谢先进!

+1

首先使用类似PDO(PHP数据库对象)来准备查询以防止SQL注入。 – 2012-03-29 20:22:14

+0

这些似乎相当定义的搜索条件,我会有一个国家的框,然后一个城市的框....可能有一个列表中的一些和他人的自由文本 – 2012-03-29 20:22:27

+0

如果空间爆炸将无法如果有一个两个字的城市。此外,如果有人搜索一个也是州名的城市,IE“纽约纽约”,您的查询将无法按预期进行。 – Norse 2012-03-29 20:40:33

回答

0

你可以输入分解单词使用:

$searchWords = explode(" ", $input); 

如果在洛杉矶有人类型,它将搜索“洛杉矶”和“洛杉矶”,但我认为它会工作得很好。如果有许多结果,您可以使用更多输入字段进行更高级的搜索。

编辑:我看到你设法得到这么远。要过滤双字检查:PHP : Find repeated words with and without space in text

编辑2:至于洛杉矶问题:也许使用“洛杉矶”作为searchword是可以接受的。然后在一个数组中看到这个非常好的帖子:PHP explode the string, but treat words in quotes as a single word

相关问题