[英]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.