PHP错误mysql_num_rows返回期望布尔错误。我的查询错了吗?

时间:2012-02-15 21:19:59

标签: php

mysql_num_rows()期望参数1为资源,第33行给出布尔值

if($password!=$password_again){
            echo'password did not match';
        }else{
            $query="SELECT username FROM users WHERE 'username'='$username'";
            $query_run=mysql_query($query);


            if(mysql_num_rows($query_run)==1){
                echo'the username'.$username.'already exists';  
            }else{
                echo'ok';
            }
        }

5 个答案:

答案 0 :(得分:4)

'username'='$username'将其更改为username='$username'

答案 1 :(得分:4)

从mysql_query获取布尔值意味着存在错误 - 查询中存在语法错误(您的错误),或其他东西爆炸(例如首先无法连接)。

将查询调用更改为

        $query_run=mysql_query($query) or die(mysql_error());

我能看到的语法错误是由于引号错误

        $query="SELECT username FROM users WHERE 'username'='$username'";
                                                 ^--------^----

当你引用这样的字段名称时,它不再是字段名称 - 它只是一个字符串。但是,这不是SQL语法错误,当您进行无效比较时,它是一个逻辑错误,而不是将真实用户名与数据库中的用户名字段进行比较。

答案 2 :(得分:0)

您的SELECT查询看起来不正确:

$query="SELECT username FROM users WHERE 'username'='$username'";

应该是

之类的东西
$query="SELECT username FROM users WHERE username='$username'";

即。不要将列名称放在单引号中。但即使这样也很危险 - 它会打开SQL注入攻击的代码。

答案 3 :(得分:0)

在将mysql_query发送到mysql_num_rows之前,您没有检查mysql_query是返回资源还是FALSE。请查看此处的文档以了解正确用法:

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

在您的情况下,您将fALSE传递给mysql_num_rows函数,这就是您收到该错误的原因。

答案 4 :(得分:0)

mysql_num_rows需要一个MySQL资源。 $ query_run被设置为false,因为你的查询是错误的,因为你的WHERE子句中有'username'的单引号。