4

可能重复:
mysql_fetch_array() 期望参数 1 是资源,选择中给出的布尔值

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

  $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

帮助表示赞赏。

4

3 回答 3

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());
}
于 2011-09-27T17:56:19.650 回答
2

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

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

鉴于您的示例查询,您缺少FROM关键字,可能应该是:

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

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

于 2011-09-27T17:56:28.970 回答
0

就像其他人评论的那样,if 语句或“or die()”可能有助于不再生成该错误,而错误可能来自查询中缺少的“FROM”。

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

INSERT ..(您要插入的内容).. ON DUPLICATE KEY UPDATE ..(如果它已经存在,要更新什么)..

欲了解更多信息,这里是关于它的 MySQLs 手册页。

于 2011-09-27T19:40:48.447 回答