2013-10-03 113 views
0

我有這樣一段代碼:如果SQL沒有返回查詢

require_once('connectvars2.php'); //This is the connection to my database 
       $data = mysql_query("SELECT * FROM calzone ORDER BY id DESC"); 
       if (isset($_POST['submit'])) { 
       $post = trim($_POST['post']); 
       $data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
        if (!(empty($data))) { // This is my poor attempt :-) 
        echo 'No result!'; 
        } 
       } 

這是在我的網站我的搜索功能。

如果沒有與搜索字匹配的查詢,我希望它返回一些內容。說如果我寫「6737」並且數據庫找不到結果,它應該打印「對不起,但沒有搜索結果!」。 有沒有辦法讓MySQL檢查是否有返回任何查詢?如果沒有,回顯一些文字?

+0

您可以簡單地對行mysql_num_rows進行計數,但您實際上不應該將變量嵌入非常危險的查詢字符串中,請考慮查看PDO。 –

+0

['mysql_num_rows()'](http://php.net/mysql-num-rows)。另外[清理您的輸入](http://xkcd.com/327/) –

+0

如何讓它不返回警告?這與@對嗎?我只是不知道該把它放在哪裏 – owwyess

回答

1

使用mysql_num_rows函數來計數。行..

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
$num=mysql_num_rows($data); 
if($num==0) 
{ 
    echo 'Sorry, but theres no results for your search'; 
} 
1
require_once('connectvars2.php'); //This is the connection to my database 
       $data = mysql_query("SELECT * FROM calzone ORDER BY id DESC"); 
       if (isset($_POST['submit'])) { 
       $post = trim($_POST['post']); 
       $data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
    if (mysql_num_rows($data) == 0){ 
     echo "Sorry, but there's no results for your search!"; 
    }else{ 
    echo "matched"; 
    } 

       } 
0

你可能尋找mysql_num_rows

使用這樣

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
if (mysql_num_rows($data) == 0) { 
    echo 'No result!'; 
} 

在一個側面說明;您正在使用mysql_XX函數來訪問數據庫。這些已被Mysqli和MySQL(PDO)取代。使用這些最新庫中的一個。

+0

你好,我知道這是非常糟糕的做法,我目前正在用準備好的語句和mysqli進行登錄,以正確的形式練習。但這對我的一個朋友來說只是一個快速修復的事情。我還想知道,如果我喜歡打印出沒有返回的行,我該如何停止打印返回失敗?這與@對嗎?我只是不記得放置在哪裏。謝謝 – owwyess

+0

我不確定你的意思是迴歸失敗。 '@'會忽略命令生成的任何錯誤 - http://php.net/manual/en/language.operators。errorcontrol.php。它應該謹慎使用,因爲在沒有正當原因的情況下抑制錯誤或者至少在日誌中可能會變得難以調試。 – Kami

+0

是的,但它帶有一個錯誤,因爲它沒有返回正確的查詢?所以我必須刪除它,以便用戶不會看到錯誤,只有在沒有找到quieries時顯示的消息 – owwyess

1

使用

if(mysql_num_rows($data)==0){ 
    echo "Sorry, but there's no results for your search"; 
} 
0

使用mysql_num_rows($數據)== 0

雖然你應該使用mysqli,而不是MySQL作爲MySQL是時下棄用

0

首先,你應該不使用mysql_ -functions導致此PHP擴展已被棄用。嘗試使用PDOMysqli擴展。

順便說一句,在這個擴展有mysql_num_rowsfunction這正是你想要的。

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
if (!mysql_num_rows($data)) { 
    echo 'No result!'; 
} 
+0

你好,我知道這是非常糟糕的做法,我目前正在用準備好的陳述和mysqli進行登錄,以正確的形式練習。但這對我的一個朋友來說只是一個快速修復的事情。我還想知道,如果我喜歡打印出沒有返回的行,我該如何停止打印返回失敗?這與@對嗎?我只是不記得放置在哪裏。謝謝 – owwyess

+0

@ user2826397是的,@是PHP支持的唯一錯誤控制操作符。當在PHP中添加表達式時,可能會忽略可能由該表達式生成的任何錯誤消息。 – zavg

2

使用mysql_num_rows

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
if(mysql_num_rows($data) > 0){ 
    //show your data 
} 
else{ 
    echo "Sorry, but there are no results for your search!"; 
} 

此外,如前所述,請求mysql_query已被棄用。切換到PDO。