如何检查mysql_query是否返回任何内容

时间:2011-09-27 17:52:11

标签: php mysql mysql-num-rows

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

所以我试图检查以下查询是否返回任何结果

  $numUsersSameRatingQuery="SELECT * `user ratings` WHERE  category='$category' AND categoryId='$categoryId' AND  `userAromaRating`>0 ";

  $result=mysql_query($numUsersSameRatingQuery);

   $numResults=mysql_num_rows($result);

  if($numResults==0)
  {
   // do the INSERT INTO
  }
  else
  {
   //do the UPDATE SET
  }

但是,上面的内容会返回以下错误,并且每次都会执行if($numResults)。换句话说,我永远无法运行else块。

这是错误

 Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\boozeDb\profileThis.php on line 141

非常感谢。

3 个答案:

答案 0 :(得分:8)

您可以使用is_resource来确保它是资源。您也可以使用if语句确保未返回FALSE

要显示错误,请使用mysql_error

示例:

<?php

// From http://ca2.php.net/manual/en/function.mysql-query.php

$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
    trigger_error('Invalid query: ' . mysql_error());
}

答案 1 :(得分:2)

mysql_query()要么返回语句句柄(查询成功),要么返回布尔值FALSE(查询失败)。您的代码不会检查错误情况并盲目地假设成功。将代码修改为如下所示:

$result=mysql_query($numUsersSameRatingQuery) or trigger_error(mysql_error());
                                             ^^^^^^^^^^^^^^^^^^^^^^--- add this

根据您的示例查询,您错过了FROM关键字,可能应该是:

SELECT * FROM `user ratings`
        ^^^^^^

强烈强烈建议您不要使用包含空格的字段名。他们只是麻烦。

答案 2 :(得分:0)

就像其他人都评论过的那样,if语句或“或者死()”可以帮助不再生成错误,而错误可能来自查询中缺少的“FROM”。

我觉得有必要评论这样一个事实,即你现在正在进行两次查询,以防止表中的某些或所有列重复:SELECT和INSERT。这可以在一个查询中完成,并可以加快您的代码:

INSERT ..(你要插入的内容).. ON DUPLICATE KEY UPDATE ..(如果它已经存在则要更新的内容)..

了解更多信息,请访问MySQLs manual page about it.