[英]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
}
這將循環直到行用完為止,然后繼續。
從結果集中檢索行數。 該命令僅對返回實際結果集的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.