可能重复:
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
非常感谢。
答案 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.