0

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

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

现在,问题是当我搜索John Doe而不是获取具有该特定名称的用户时,我得到了所有用户的名称JohnDoe而且有趣的是,它甚至没有放在John Doe顶部,这意味着......你可以在John xxxx之前找到那。

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

4

4 回答 4

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%"';

不会成功的。

这是因为单引号字符串不解释变量。

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

但是,双引号字符串会。

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

更新:感谢记忆,这被大量编辑和改变了:)

于 2013-04-29T19:37:15.587 回答
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

于 2013-04-29T19:40:02.767 回答
0

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

实际上,由于您将查询用单引号括起来,因此您真正要查询的是:

SELECT username FROM members WHERE name LIKE %$name%

与文字$name

像这样写你的查询:

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";
于 2013-04-29T19:41:03.307 回答
0

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

于 2013-04-29T19:42:37.870 回答