2016-04-22 81 views
0

我試圖創建一個餐館搜索,即使用戶只輸入整個名稱的一部分,它會在數據庫中找到餐廳。PHP中的SQL Wildecard查詢

下面是代碼:

首先,我走輸入,消毒,然後添加%跡象左右。

$restaurantNameTest = InputCleaner($_GET["restaurantName"]); 
$restaurantName = ('%' . $restaurantNameTest . '%'); 

然後我運行查詢:

$result = mysqli_query($conn, 
"SELECT restaurantID,restaurant_name, cusine, wait_time 
FROM Restaurant 
WHERE restaurant_name = '$restaurantName'"); 

出於某種原因,這是不工作也沒有結果被發現,除非我的名字完全型。我做錯了嗎?

+0

你爲什麼把'$ restaurantName'放在括號裏?那些括號是不需要的。 – Martin

回答

2

使用像,而不是

$result = mysqli_query($conn, 
"SELECT restaurantID,restaurant_name, cusine, wait_time 
FROM Restaurant 
WHERE restaurant_name LIKE '$restaurantName'"); 
+0

就是這樣!謝謝! –

+0

使用它,你會得到SQL注入與獲取參數。正確的答案是用''bind_param'' – raven428

+1

嗨,Raven,我敢肯定這個人可能在上學,你說得對,bind_param和mysqli更好。我的回答沒有錯。 問題不在於:「我如何編寫正確的代碼」因爲那麼我會告訴他停止使用PHP,並直接編寫查詢。 簡單地去適當的安全功能仍然是糟糕的編程。 美好的一天。 –

1

這是一個多PHP問題的SQL問題,但我相信你需要的是WHERE子句的LIKE comparison

因此改變你的查詢閱讀:...WHERE restaurant_name LIKE '$restaurantName'");

LIKE將匹配部分字符串,根據通配符(%)字符(S)的位置。

1

所以有幾件事要注意,首先要回應別人的說法 - 您應該在查詢中使用LIKE。最重要的是你應該使用的MySQLi的prepared statements

所以,你會希望有一個你的代碼看起來是這樣的:

$sql = "SELECT restaurantID, 
       restaurant_name, 
       cusine, 
       wait_time 
     FROM Restaurant 
     WHERE restaurant_name LIKE '%?%'"; 

$query = $connection->prepare($sql); 
$query->bind_param('s'. $restaurantName); 

$query->execute(); 

我主要是PDO用戶,所以你可能要仔細檢查上面的語法,但它應該工作。

再次重申對您的問題具體是:

  • 使用LIKEwildcards得到你之後,而不是=結果。
+0

雖然不是他的問題,但確實如此。 –