检查PHP结果是否返回的最好方法是什么?

我正在寻找最好的方法来检查查询是否有任何结果返回。 我感觉好像我写了这么多的代码,有时我会得到错误,有时我不会。

例如,我运行这个查询来检查用户名是否存在,然后再向数据库中插入一个用户名。

$result = mysql_query("SELECT * FROM ..."); 

然后我想查看是否有结果返回。 这是我做的一个方法:

 if (!$result) { PERFORM ACTION } 

如果第一种方式行不通,那么有时候这样做会:

 if (mysql_num_rows($result)==0) { PERFORM ACTION } 

然后我甚至看到我可以这样做:

 list($total) = mysql_fetch_row($result); if ($total==0) { PERFORM ACTION } 

做这个的最好方式是什么?

 if (mysql_num_rows($result)==0) { PERFORM ACTION } 

这得到我的投票。

OP假设查询没有返回任何错误,所以这应该是其中一种方式

一种方法是检查mysql_num_rows返回的内容。 一个最小的完整例子如下:

 if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) { // there are results in $result } else { // no results } 

但build议您检查mysql_query的返回值,并在false的情况下处理它(这可能是由错误引起的)。 可能也通过调用mysql_error并logging错误的地方。

每当我们做查询来获取一些数据,它就会作为一个对象返回。 然后,我们大多数人将其转换为数组,以便轻松地循环访问行。 在PHP“空()”函数是用来检查数组是否是空的,即如果它没有数据。 所以我们可以通过这样做来检查返回的查询数组表示是否为空

 if(!empty($result)){ //DO STUFF } 

在处理之前testing结果variables的types是什么更合乎逻辑? 它是'布尔'或'资源'types的。 当您使用mysqli_num_rows参数的布尔值时,将会生成一个警告,因为该函数需要一个资源。

 $result = mysqli_query($dbs, $sql); if(gettype($result)=='boolean'){ // test for boolean if($result){ // returned TRUE, eg in case of a DELETE sql echo "SQL succeeded"; } else { // returned FALSE echo "Error: " . mysqli_error($dbs); } } else { // must be a resource if(mysqli_num_rows($result)){ // process the data } mysqli_free_result($result); } 

以上所有的选项我会用

if (mysql_num_rows($result)==0) { PERFORM ACTION }

检查下面的结果

 if (!$result) { PERFORM ACTION } 

这将是真实的,如果一个mysql_error发生如此有效,如果发生错误,你可以input一个重复的用户名…

因为“对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回resultset的语句,mysql_query()在成功时返回资源,或者在错误时返回FALSE,所以使用mysql_fetch_row

对于其他types的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功返回TRUE,错误返回FALSE。 “

通常我使用=== ( triple equals )和__CLASS____CLASS__在我的代码中find错误:

 $query=mysql_query('SELECT champ FROM table') or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error()); mysql_close(); if(mysql_num_rows($query)===0) { PERFORM ACTION; } else { while($r=mysql_fetch_row($query)) { PERFORM ACTION; } } 
 $result = $mysqli->query($query); if($result){ perform action } 

这是我怎么做的,你也可以在那里扔一个死亡…

如果您仍想在$result无效的情况下执行操作:

 if(!mysql_num_rows($result)) // Do stuff 

这将解释为0 ,失败时由mysql_num_rows()返回的false

如果没有行, mysqli_fetch_array()返回NULL

程序风格:

 if ( ! $row = mysqli_fetch_array( $result ) ) { ... no result ... } else { ... get the first result in $row ... } 

在面向对象的风格:

 if ( ! $row = $result->fetch_array() ) { ... } else { ... get the first result in $row ... } 
 if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

这样,如果结果是肯定的(你在你的数据库中有一个匹配你的查询的logging),那么你检查并采取行动,另一种方式(== 0),当没有给出结果时你执行了这个动作。

 if (mysql_num_rows($result)>0) { PERFORM ACTION } if ($result) { PERFORM ACTION }