2017-09-14 114 views
1

我在我的網站中查詢搜索功能時遇到了一些問題。我有一個保存書籍數據的表格,並且在前端頁面中我有搜索功能,可以通過一些搜索參數查找書籍。爲搜索功能創建MySql查詢

這是我的數據庫表:

book_id | book_name  | book_location | book_qty | book_date 
----------------------------------------------------------------- 
1  | Triangle Math | rack1   | 2  | 2017-06-12 
2  | Basic Knowledge | rack2   | 3  | 2016-08-09 
3  | Legend Truth | rack3   | 1  | 2014-05-17 
4  | Temporary Brain | rack4   | 1  | 2013-01-23 

這是我在前臺頁面搜索:

1. Input Field book name -- $name 
2. Dropdown list book location -- $location 
3. Search Button 

上面的四個參數是要在查詢中使用了GET搜索結果的變量。

我已經嘗試過此查詢,但不給我我想要的最好的結果。

SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."' 

當我選擇剛剛在下拉列表中的位置和離場書名空例如我選擇RACK1我得到的結果中的所有數據被顯示。我只是想獲得中的數據rack1。我var_dump()查詢後,我才意識到,我得到這個查詢:

SELECT * FROM `book` WHERE book_name like '%%' OR book_location = 'rack1' 

而且我知道與查詢,我會得到所有的數據,因爲book_name like'%%'

我想問的是如何做出最佳的查詢搜索如果沒有搜索功能的所有參數未填寫?謝謝。

+0

使用if,如果$ name ==「」;執行SELECT * FROM'book' WHERE BOOK_NAME像 '%%' OR book_location = 'RACK1' –

+0

其他{SELECT * FROM'book' WHERE BOOK_NAME LIKE '% 「$名字。」 %' OR book_location =「」。$位置。''} –

+0

@BarclickFloresVelasquez如果我使用'book_name like'%%'',它會顯示錶中的所有數據。 – Antonio

回答

0

只是檢查是否$name爲空,則執行相應的查詢:

if ($name !== "") { 
    // SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."' 
} 
else { 
    // SELECT * FROM `book` WHERE book_location = '".$location."' 
} 

你也可以做一個查詢,如果您使用的是短路條件:

SELECT * FROM book WHERE (".$name." != "" AND book_name LIKE '%".$name."%') OR book_location = '".$location."'; 

這會僅在第一個操作數也爲真時檢查第二個操作數($name非空)


爲戒,你似乎是容易受到SQL注入。使用prepared statements