我正在创建一个Ajax自动完成应用程序,并想知道是否有一个我可以用于此目的的SQL查询 - 例如,如果某人键入“p”我想要检索以“p”开头的所有单词,如果他们添加“e”检索以“pe”开头的所有单词 - 并继续这样。
有人建议下面的查询,但我不认为这是我正在寻找的:
$query = "SELECT* FROM nametable WHERE names LIKE '$partialstring' ";
答案 0 :(得分:3)
$query = "SELECT* FROM nametable WHERE names LIKE '$partialstring%' ";
我只在右侧添加了%,因为您只想使用以输入字母开头的单词。
但是,在针对SQL注入过滤它之前,请不要使用此查询。
答案 1 :(得分:2)
这应该有效:
$query = "SELECT * FROM nametable WHERE names LIKE '$partialstring%'"
%
是SQL中的通配符。
编辑:是的,请sanitize that input。
答案 2 :(得分:1)
除了常规的特殊字符外,您必须在LIKE clauses中逃避具有特殊含义的字符。
我还没有对代码进行全面测试,但它应该是这样的,假设你使用的是PHP和旧的mysql扩展名(你没有提到):
$escape = '|';
$like = strtr(
mysql_real_escape_string($partialstring),
array(
'%' => $escape . '%',
'_' => $escape . '_',
$escape => $escape . $escape,
)
);
$query = "SELECT names FROM nametable WHERE names LIKE '$like%' ESCAPE '$escape' ORDER BY names LIMIT 10";
另外,不要忘记在名称列上创建索引。
答案 3 :(得分:0)
假设您正在清理该输入,它应该是:
$query = "SELECT* FROM nametable WHERE names LIKE '$partialstring%' ";
答案 4 :(得分:0)
您可以像Henning和其他人一样编写查询。并且,是的,请清理输入以防止注入攻击。我还发现,当有大量记录时,这种方法相当慢。如果你想在'GeorgeW Bush Senior'这个词中匹配' Bush ',那么上面提到的方法就行不通了。在这种情况下,您必须使用查询
select name from nametable where name like '%match%';
尝试查看mysql full text query方法。在某些情况下它非常方便。