什么是正确的方法来检查mysql_query()是否返回任何结果?

时间:2009-07-24 22:27:17

标签: php mysql

我尝试了一种看似最直观的方法

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

if ($result)
{ ... 

但是这不起作用,因为mysql_query返回一个真值,即使返回0行。

我基本上只想在返回一行时才在该条件下执行逻辑。

8 个答案:

答案 0 :(得分:22)

使用mysql_num_rows

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

答案 1 :(得分:7)

如果您要检查一行:

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

您可以使用mysql_fetch_array()或其他,但原则是相同的。如果您正在预期一行或多行:

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

这将循环直到它用完行,此时它将继续。

答案 2 :(得分: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,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,但成功查询了数据库。

答案 3 :(得分:5)

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

这应该有用。

答案 4 :(得分:3)

我使用了以下内容:

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

如果查询没有返回任何内容,那么它将是一个布尔结果,它的值将为0.

所以你检查它是否为零,如果没有,我们知道那里有什么东西..

然而,有时它会返回一个1,即使那里没有任何东西,所以你那么检查是否有任何行,如果那里有一个完整的行,你肯定知道结果已经返回

答案 5 :(得分: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 Novak

答案 6 :(得分:1)

以及...

by 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()从查询中逐行获取

答案 7 :(得分:0)

$result = mysql_query(...);

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