簡體   English   中英

檢查 mysql_query 是否返回任何結果的最佳方法?

[英]Best way to check if mysql_query returned any results?

我正在尋找檢查並查看查詢中是否返回任何結果的最佳方法。 我覺得這部分代碼我寫了很多,有時我會出錯,有時我不會。

例如,我運行此查詢以在將新用戶名插入數據庫之前檢查用戶名是否存在。

$result = mysql_query("SELECT * FROM ...");

然后我想檢查一下是否返回了任何結果。 這是我這樣做的一種方法:

if (!$result) { PERFORM ACTION }

如果第一種方法不起作用,那么有時會:

if (mysql_num_rows($result)==0) { PERFORM ACTION }

然后我什至有一天看到我可以這樣做:

list($total) = mysql_fetch_row($result);
if ($total==0) { PERFORM ACTION }

做這個的最好方式是什么?

if (mysql_num_rows($result)==0) { PERFORM ACTION }

對於 PHP 5 和 7 及以上版本,請使用 mysqli:

if (mysqli_num_rows($result)==0) { PERFORM ACTION }

一種方法是檢查mysql_num_rows返回什么。 一個最小的完整示例如下:

if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) {
    // there are results in $result
} else {
    // no results
}

但建議您檢查mysql_query的返回值,如果為false (可能是錯誤導致),請妥善處理; 可能還通過調用mysql_error並在某處記錄錯誤。

每當我們進行查詢以獲取某些數據時,它都會作為對象返回。 然后我們大多數人將其轉換為數組,以便輕松遍歷行。 在 php 中,“empty()”函數用於檢查數組是否為空,即其中是否沒有數據。 所以我們可以通過這樣做來檢查查詢的返回數組表示是否為空

if(!empty($result)){
           //DO STUFF
}

有什么比在處理之前測試結果變量的 TYPE 更合乎邏輯? 它是“布爾值”或“資源”類型。 當您對 mysqli_num_rows 參數使用布爾值時,將生成警告,因為該函數需要資源。

$result = mysqli_query($dbs, $sql);

if(gettype($result)=='boolean'){ // test for boolean
    if($result){  // returned TRUE, e.g. in case of a DELETE sql  
        echo "SQL succeeded"; 
    } else { // returned FALSE
        echo "Error: " . mysqli_error($dbs);
    } 
} else { // must be a resource
    if(mysqli_num_rows($result)){

       // process the data    

    }
    mysqli_free_result($result);  
 }
$connect = new mysqli('localhost', 'user', 'password', 'db');
$result = $connect->query("select * from ...");
$count=$result->num_rows;
if(empty($count)){
echo"Query returned nothing";
}
else{
echo"query returned results";
} 

如果沒有行, mysqli_fetch_array()返回NULL

在程序風格中:

if ( ! $row = mysqli_fetch_array( $result ) ) {
    ... no result ...
}
else {
    ... get the first result in $row ...
}

在面向對象的風格中:

if ( ! $row = $result->fetch_array() ) {
    ...
}
else {
    ... get the first result in $row ...
}

在上述所有選項中,我會使用

if (mysql_num_rows($result)==0) { PERFORM ACTION }

檢查結果如下

if (!$result) { PERFORM ACTION }

如果 mysql_error 如此有效地發生,如果發生錯誤,您可以輸入重復的用戶名,那么這將是正確的...

mysql_fetch_row一起使用,因為“對於 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回結果集的語句,mysql_query() 在成功時返回資源,或者在錯誤時返回 FALSE。

對於其他類型的 SQL 語句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 在成功時返回 TRUE,在錯誤時返回 FALSE。

if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

這樣,如果結果是肯定的,您檢查並執行操作(您的數據庫中有一條與您的查詢匹配的記錄),另一種方式(== 0)您在未給出結果時執行了該操作。

$result = $mysqli->query($query);
if($result){
    perform action
}

我就是這樣做的,你也可以用一個骰子扔一個 else ......

如果您仍想在$result無效的情況下執行該操作:

if(!mysql_num_rows($result))
    // Do stuff

這將說明0mysql_num_rows()在失敗時返回的false

通常我使用===三重等號)和__LINE____CLASS__來定位我的代碼中的錯誤:

$query=mysql_query('SELECT champ FROM table')
or die("SQL Error line  ".__LINE__ ." class ".__CLASS__." : ".mysql_error());

mysql_close();

if(mysql_num_rows($query)===0)
{
    PERFORM ACTION;
}
else
{
    while($r=mysql_fetch_row($query))
    {
          PERFORM ACTION;
    }
}
if (mysql_num_rows($result)>0) { PERFORM ACTION }
if ($result) { PERFORM ACTION }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM