[英]MySQL LIKE query not pulling similar data
我有一个简单的基于MySQL的搜索脚本,我将仅在下面发布与该问题有关的部分。
$name = 'John Doe';
$query = 'SELECT username FROM members WHERE name LIKE %$name%';
现在的问题是,当我搜索John Doe
而不是获得具有该特定名称的用户时,我得到了所有名为John
和Doe
用户,有趣的是,它甚至没有将John Doe
。 ..您可以在此之前找到John xxxx
。
是否有高级MySQL属性来完成此任务?
更改
$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语法不同,特殊字符的变量和转义序列在单引号引起来的字符串中不会扩展。
但是,会使用双引号引起来的字符串 。
双引号字符串的最重要特征是变量名称将被扩展。 有关详细信息,请参见字符串解析。
更新:由于使用了Memolition,因此对其进行了大量编辑和含义更改:)
更改
$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'
所以'
单引号适用于strings
和variables
和"
双引号仅适用于strings
您需要在用作LIKE
比较的字符串周围加上单引号
实际上,由于您将查询用单引号引起来,因此真正要查询的是:
SELECT username FROM members WHERE name LIKE %$name%
文字$name
。
这样编写查询:
$query = "SELECT username FROM members WHERE name LIKE '%$name%'";
您也可以使用全文本索引(仅MyISAM AFAIR)和MATCH AGAINST子句。 它还将为您提供相似率。 在某些情况下非常有用。 此处的示例: http : //forum.kohanaframework.org/discussion/9182/mysql-full-text-searching-match-against/p1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.