2011-10-23 146 views
3

我在mysqli中編寫了一個php表格搜索表,它工作正常,但是如果沒有找到結果,我想向用戶顯示正確的消息。檢查是否沒有在MySQL數據庫中找到結果

這裏是我當前的代碼:

$search_string=$_GET["design"]; 

$connect= mysqli_connect("mysql.myhost.com","abc","123456","mydb_db"); 
$query="select * from product where product_design like '%$search_string%'"; 
$rows= @mysqli_query($connect,$query) or die("Error: ".mysqli_error($connect)); 
if ($rows!=null)//I put this if to check if there is any result or not but its not working 
{ 

while(($record=mysqli_fetch_row($rows))!=null) 
{ 
    . 
      .//i have working code for showing the result here 
      . 
} 
mysqli_close($connect); 
} 
else{ 
echo"no result found"; 
} 

能否請你幫我什麼是錯的,甚至當我搜索一些東西,是不是在DB仍然沒有顯示程序「沒有結果發現」存在

謝謝

+1

嘗試將'$ rows!= null'更改爲'$ rows> 0' – lemonpole

+1

希望沒有人運行設計=''; DROP TABLE產品的GET請求;' –

+0

要擴展@ Phil的觀點,您的代碼是非常容易受到[SQL Injection](http://php.net/manual/en/security.database.sql-injection.php)的攻擊。這意味着任何使用您的網站的人都可以對數據庫做任何事情。考慮使用參數化查詢(谷歌它), – Basic

回答

3

你需要的是mysqli_num_rows特別是mysqli_result::num_rows位。這會爲mysqli結果集添加一個num_rows屬性。這意味着你可以做

$rowCount = $rows->num_rows

還有一個非面向對象等效...

$rowCount = mysqli_num_rows($rows);

(所不同的是純粹的編碼風格之一)

用途之一這些來確定返回多少條記錄並輸出適當的消息。

+0

謝謝,但事情是當我把回聲檢查行數,如果我離開文本框空白num_rows是12因爲我有12個記錄在表中。但如果我把其中一個現有的行作爲搜索,它將返回1,因爲只有一行匹配。它是starnge – David83

+0

它聽起來像是完美的工作......行數只是數據庫發回的行數,從來沒有存儲在數據庫中的行數(除非你獲得所有的行)。 – Basic

+1

如果您想知道表中的總行數,請對「SELECT COUNT(*)AS TotalRecordCount FROM product」執行第二個查詢,該查詢將返回一個字段(稱爲'TotalRecordCount'),其中一行包含數字表中的行。 – Basic

0

下面一行沒有意義,這可能是問題。

while(($record=mysqli_fetch_row($rows))!=null) 

但是,如果$ row爲空,但不會返回'null',但不會被設置。像這樣做:

if ($rows) { echo 'works';} else { echo 'no rows'; } 
+0

感謝您的幫助,但我已經解決了這個問題,使用num-rows。:) – David83

相關問題