2009-07-24 84 views
11

我試了一下好像是最直觀的方法檢查mysql_query()是否返回任何結果的正確方法是什麼?

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

if ($result) 
{ ... 

,但沒有工作,因爲mysql_query返回即使返回0行的真正價值。 我基本上只想在返回一行時執行該條件下的邏輯。

+0

在代碼中使用`$ _CLEAN`看起來非常可疑。看看這裏爲什麼這是一個壞主意:http://stackoverflow.com/questions/6164522/will-this-code-actually-work-against-sql-injection – Johan 2011-05-28 21:59:34

回答

22

使用mysql_num_rows

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

對於大型集合,這個函數比使用mysql_fetch_array效率低,但在這裏它看起來很好。 – Smandoli 2009-07-24 22:47:05

7

如果你檢查的具體哪一行:

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

您可以使用mysql_fetch_array()代替,或什麼的,但原理是一樣的。如果您正在等待1行或更多行:

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

這將循環直到耗盡行,此時它將繼續。

2

怎麼樣這樣:

$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諾瓦克

1

好...

通過definiton的mysql_query:

的mysql_query()返回在 成功的資源,或者在錯誤FALSE。

,但你需要了解什麼是如果這個函數返回的查詢已經運行沒有問題,而不是FALSE不同的值(正確的語法,連接還活着,等。),但是這並不意味着你的查詢返回一些行。

例如

<?php 

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

print_r($result); // => true 

?> 

所以如果你假,你可以使用

mysql_errorno()mysql_error()知道發生了什麼事..

本以下:

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

6

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的行數,替換或刪除查詢,使用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

+0

有很好的解釋! – jolt 2010-07-21 11:01:32

3

我用下面的:

如果(!$結果= 0 & & mysql_num_rows($結果)){

如果查詢沒有返回這將是一個布爾結果,它的價值將是0 。

所以你檢查它是否是零或沒有,如果沒有,我們知道有什麼東西在那裏..

但是,有時它會返回1,即使是沒有在那裏,所以你然後檢查是否有任何行,如果在那裏有一整行,你肯定知道結果已經被返回。

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

這應該有效。

+0

無法正常工作$結果變得錯誤 – 2015-04-07 11:02:15

0
$result = mysql_query(...); 

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

[`mysql_query()`](http://php.net/manual/en/function.mysql-query.php)將僅在錯誤時返回FALSE。如果結果爲空,則返回空資源。你的代碼不會工作。 順便說一下,它會一直在寫`if($ result)` – 2012-04-27 09:26:15

相關問題