MySQL LIKE查询没有拉出类似的数据

时间:2013-04-29 19:34:16

标签: php mysql

我有一个简单的基于MySQL的搜索脚本,我将仅发布与下面问题相关的部分。

$name = 'John Doe';
$query = 'SELECT username FROM members WHERE name LIKE %$name%';

现在,问题是当我搜索John Doe而不是让用户使用该特定名称时,我会收到名为JohnDoe的所有用户,而有趣的是,它甚至没有将John Doe置于顶部,这意味着......在此之前你可以找到John xxxx

是否有高级MySQL属性来完成此任务?

4 个答案:

答案 0 :(得分:2)

变化

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = 'SELECT username FROM members WHERE name LIKE "'.%$name%.'"';

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

注意,改为

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

NOT 执行此操作。

这是因为single quoted strings不解释变量。

  

注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中不会扩展。

Double quoted strings但是,会。

  

双引号字符串最重要的特性是变量名称将被扩展。有关详细信息,请参阅字符串解析。

更新: 由于Memolition,它经过大量编辑和改变,意思是:)

答案 1 :(得分:1)

变化

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

不是

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

因为luksch所说的双引号会打印$ name而不是$ name变量值

所以它必须是单引号',如'%name'

所以'单引号适用于stringsvariables

"双引号仅适用于strings

答案 2 :(得分:0)

您需要在您使用的字符串周围添加单引号作为LIKE的比较

事实上,由于您在单引号中查询了您真正要查询的内容:

SELECT username FROM members WHERE name LIKE %$name%

使用文字$name

像这样写下你的查询:

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

答案 3 :(得分:0)

您还可以使用全文索引(仅限MyISAM AFAIR)和MATCH AGAINST子句。 它还会给你相似的速度。在某些情况下非常有用。 例如:http://forum.kohanaframework.org/discussion/9182/mysql-full-text-searching-match-against/p1