2016-04-23 23 views
1

我建立在PHP一個簡單的搜索引擎,從MySQL數據庫中檢索動物的名字,當用戶搜索它。MySQL查詢沒有找到第一個字

說我有如下表:

ID | Name 
--------------- 
1 | Red panda 
2 | Okapi 
3 | Red fox 

當用戶輸入"panda"它返回Red Panda行,當他們輸入"red panda"再次回到了Red Panda row

但是,當用戶輸入"red"它沒有返回。

但是搜索"Okapi"確實工作。

出於某種原因,在搜索由多個單詞不返回任何東西多的第一個字。

我使用查找數據的查詢如下:

"SELECT * FROM example_table WHERE Name LIKE '%%$search'" 
+0

如果您有..分享您的整個代碼以及PHP代碼和您的HTML代碼! –

+2

試試這個「SELECT * FROM example_table WHERE名稱LIKE'%$ search%'」 –

+0

@SachinVairagi是正確的,它會正常工作 –

回答

1

您可以使用它像這樣:

"SELECT * FROM example_table WHERE Name LIKE '%".$search."%'"; 
0

你放在一個通配符在開始你喜歡的字符串,所以你會發現任何名稱結束與搜索字詞。

以搜索包含搜索詞在像字符串的結尾添加通配符所有名稱:

LIKE '%$search%' 
1

如果你需要找到任何這包含你要搜索的內容那麼你應該在查詢中使用%通配符,在你的$search之前和之後。

因此,你應該做的:

$query = "SELECT * FROM example_table WHERE Name LIKE %$search%"; 

您目前使用只會匹配,因爲他們在$search它的結束這些值的方式。

例如:

ID | Name 
--------------- 
1 | Red panda 
2 | Okapi 
3 | Red fox 
4 | kaok // added for examples 
  • 匹配%ka

    不會返回任何東西,因爲kaokOkapika後的東西。有了這個查詢,你正在尋找開始與你的表達;

  • 匹配%ka%

    將返回兩個kaokOkapi。有了這個查詢,您正在尋找包含您的表達;

  • 匹配ka%

    將只返回kaok。有了這個查詢,您正在尋找以您的表達結束的所有事情。

查看關於模式匹配的MySQL Dev guide

當然,正如Elzo Valugi指出的,在他的回答中,您需要記住清理您的輸入以避免SQL注入。

更改此

"SELECT * FROM example_table WHERE Name LIKE '%%$search'" 

這樣::

"SELECT * FROM example_table WHERE Name LIKE '%$search%'" 

通過在搜索的字符串兩側添加%

0

這是因爲你的SQL查詢需要稍微修改沒有返回,您的數據庫將查找將該詞插入到其中的任何列值。

讓我知道,如果這解決了它,或者如果有更多的問題!

+0

感謝這似乎已經修復它! – Crodociles

+0

@Crodociles沒問題!如果我的解決方案是爲您工作的解決方案,請接受它(綠色複選標記),以便將來的用戶知道它在讀取線程時工作:) – Webeng

0

試試這個

%通配符應該是這樣的

$query = "SELECT * FROM example_table WHERE Name LIKE '%$search%'"; 
+0

http:// stackoverflow。COM /問題/ 36809684/MySQL的查詢,未發現一字/ 36809695#comment61192416_36809734 – C2486

0

一個側面說明,不直接聚集用戶輸入的SQL查詢。這是完全不安全的做法,並導致SQL注入,實際上這裏顯示的所有示例都是不好的做法。使用binding參數使用mysqli或PDO創建您的查詢。

$search = "%". "your_search_term" . "%"; 
$sth = $dbh->prepare('SELECT * 
    FROM example_table 
    WHERE name like :search'); 
$sth->bindParam(':search', $search, PDO::PARAM_STR, 12); 
$sth->execute(); 
0

它與選擇查詢有關。您只能更改選擇查詢。

select * from tbl_pets where name like "%'".$data."'%" 

和實際MySQL查詢

select * from tbl_pets where name like "%red%" 

你可以看看這兒過得創造從您還可以檢查模式。

http://sqlfiddle.com/#!9/c08b0/1