簡體   English   中英

檢查mysql_query()是否返回任何結果的正確方法是什么?

[英]Whats the proper way to check if mysql_query() returned any results?

我嘗試了看起來最直觀的方法

$query = "SELECT * FROM members 
          WHERE username = '$_CLEAN[username]'
          AND password = '$_CLEAN[password]'";
$result = mysql_query($query);

if ($result)
{ ... 

但這不起作用,因為即使返回0行, mysql_query也會返回一個真值。

我基本上只想在返回行的情況下執行該邏輯。

使用mysql_num_rows

 if (mysql_num_rows($result)) {
    //do stuff
 }

如果您要檢查的只是一行:

if ($Row = mysql_fetch_object($result)) {
    // do stuff
}

您可以改用mysql_fetch_array()或其他方法,但原理相同。 如果您要期待1行或更多行:

while ($Row = mysql_fetch_object($result)) {
    // do stuff
}

這將循環直到行用完為止,然后繼續。

mysql_num_rows

從結果集中檢索行數。 該命令僅對返回實際結果集的SELECT或SHOW語句有效。

如果不匹配,則返回值為零,有效值為FALSE

$result = mysql_query($query);

if(mysql_num_rows($result))
{ //-- non-empty rows found fitting your SQL query

  while($row = mysql_fetch_array($result))
  {//-- loop through the rows, 
   //--   each time resetting an array, $row, with the values

  }
}

如果您僅退出數據庫,那一切都很好。 如果您更改或刪除數據庫中的行,並想知道有多少行受其影響...

要檢索受INSERT,UPDATE,REPLACE或DELETE查詢影響的行數,請使用mysql_affected_rows()

$result = mysql_query($query);

if(mysql_affected_rows())
{ //-- database has been changed 

}

//-- if you want to know how many rows were affected:
echo 'Rows affected by last SQL query: ' .mysql_affected_rows();

如果查詢失敗, mysql_query()將僅返回FALSE 即使沒有行,但查詢數據庫成功,它也會返回TRUE

$sql = "SELECT columns FROM table";
$results = mysql_query($sql, $conn);
$nResults = mysql_num_rows($results);
if ($nResults > 0) {
   //Hurray
} else {
   //Nah
}

這應該工作。

我使用了以下內容:

if($ result!= 0 && mysql_num_rows($ result)){

如果查詢不返回任何內容,則將是布爾結果,其值為0。

因此,您檢查它是否為零,如果不為零,我們知道其中有些東西。

但是,有時即使其中沒​​有任何內容,它也會返回1,因此您然后檢查其中是否有任何行以及其中是否有完整的行,就可以確定已經返回了結果。

那么這種方式呢:

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]'
                                  AND password = '$_CLEAN[password]'";
$result = mysql_query($query);
$result = mysql_fetch_array($result);

//you could then define your variables like:
$username = $result['username'];
$password = $result['password'];

if ($result)
{ ...

我喜歡它,因為我對mysql_query返回的結果非常具體。

-伊萬·諾瓦克(Ivan Novak)

好...

通過definiton mysql_query:

mysql_query()成功返回資源,錯誤返回FALSE。

但是您需要了解的是,如果此函數返回的值與FALSE不同,則查詢已成功運行(沒有錯誤的語法,正確的連接,仍然有效,等等),但這並不意味着您的查詢正在返回某行。

例如

<?php

$result = mysql_query("SELECT * FROM a WHERE 1 = 0");

print_r($result); // => true

?>

因此,如果您獲得FALSE,則可以使用

mysql_errorno()mysql_error()知道發生了什么。

以下:

您可以使用mysql_fetch_array()從查詢中逐行獲取

$result = mysql_query(...);

if(false !== $result)
{
    //...
}

暫無
暫無

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

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