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

Rya*_*yan 13 php mysql

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

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

if ($result)
{ ... 
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为mysql_query即使返回0行也会返回true值.

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

the*_*edz 23

使用mysql_num_rows:

 if (mysql_num_rows($result)) {
    //do stuff
 }
Run Code Online (Sandbox Code Playgroud)


dir*_*ide 7

如果您正在检查一行:

if ($Row = mysql_fetch_object($result)) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

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

while ($Row = mysql_fetch_object($result)) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

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


ran*_*dom 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

  }
}
Run Code Online (Sandbox Code Playgroud)

如果你只退出数据库,这一切都很好.如果您更改或删除数据库中的行,并想知道有多少受其影响...

要检索受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();
Run Code Online (Sandbox Code Playgroud)

mysql_query()只有FALSE在查询失败时才会返回.TRUE即使您没有行,它也会返回,但是成功查询了数据库.


Teb*_*ebo 6

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

这应该工作.