0

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

嘿,我正在制作一个独特的计数器。

<?php  
$ip_add = $_SERVER['REMOTE_ADDR'];

function ip_exists($ip){
  global $ip_add;
  $query = "SELECT 'ip_count' from 'count_ip' where 'ip_count' = '$ip_add'";
  $query_run = mysql_query($query);
  $query_num_rows = mysql_num_rows($query_run);

  if($query_num_rows == 0){
    return false;
  }
  else if($query_num_rows >= 1){
    return true;
  }
}

if(ip_exists($ip_add)) {
  echo " exists";
} else {
  echo "doesnt";
}
...

我收到此错误:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in 
C:\wamp\www\php\Hit Counter\index.php on line 18

错误在这里:

$query_num_rows = mysql_num_rows($query_run);
4

4 回答 4

2

首先,我们在错误消息中看到boolean given- 为 SELECT 查询返回布尔值的唯一原因mysql_query()是查询失败 - 因为您的 SQL 中有语法错误,所以它会这样做。您需要将一些单引号更改为反引号:

$query = "
  SELECT `ip_count`
  FROM `count_ip`
  WHERE `ip_count` = '$ip_add'
";

对象名称(列、表等)应该用反引号 ` 引用,任何用单引号 ' 包围的东西都被视为文字字符串。

您需要检查查询是否失败:

$query_run = mysql_query($query);
if (!$query_run) {
  // Handle error here
}
$query_num_rows = mysql_num_rows($query_run);

一些额外的评论:

于 2012-05-15T18:39:44.567 回答
1

测试你query以确保它被正确执行:

<?php
...
$query_run = mysql_query($query);
if (!$query_run) {
  die('Invalid query: ' . mysql_error());
} else {
  // continue your code
}
?>

像这样,如果查询失败,你可以得到一些反馈来分析!

请参阅: mysql_query 示例,#1 无效查询

于 2012-05-15T18:41:50.847 回答
0

mysql_query()返回一个布尔值,查询是否成功。如果要传入正确的参数,则需要将连接处理程序分配给一个变量,然后将其传入。

$conn = mysql_connect()...
...
$query_num_rows = mysql_num_rows($conn);

虽然你不应该再使用mysql_*函数了!看我对你问题的评论!

于 2012-05-15T18:41:20.910 回答
0

实际上查询有语法错误导致 $query_run() 返回错误而不是实际输出。在查询中使用引号时必须小心。像这样替换查询:

$query = "SELECT ip_count from count_ip where ip_count='$ip_add'";

如果 $ip_add 不是字符串,也请避免使用单引号。如果您正在编写字段名称或表名称,请避免使用引号。仅在编写字符串的地方才需要引号。

于 2012-05-15T18:43:12.187 回答