PHP错误mysql\u num\u行返回布尔错误。我的问题错了吗?

PHP错误mysql\u num\u行返回布尔错误。我的问题错了吗?,php,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);

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';
            }
        }

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

从mysql查询中获取布尔值意味着出现错误-查询中存在语法错误(您的查询中存在语法错误),或者其他故障(例如,无法首先连接)

将查询调用更改为

        $query_run=mysql_query($query) or die(mysql_error());
我看到的语法错误是由错误的引号引起的

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

当您引用这样的字段名时,它不再是字段名—它只是一个字符串。但是,这不是SQL语法错误,这是一个逻辑错误,因为您正在进行无效比较,并且没有将真实用户名与数据库中的用户名字段进行比较。

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

$query="SELECT username FROM users WHERE 'username'='$username'";
应该是这样的

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

i、 e.不要将列名用单引号引起来。但即使这样也很危险——它会使您的代码受到SQL注入攻击。

在将mysql\u查询发送到mysql\u num\u行之前,您没有检查它是否返回了资源或FALSE。请查看此处的文档以了解正确的用法:


在您的例子中,您正在向mysql\u num\u rows函数传递一个FALSE,这就是为什么会出现该错误。

mysql\u num\u rows需要一个mysql资源$查询运行被设置为false,因为您的查询出错,原因是WHERE子句中的“username”周围有单引号。

echo mysql\u error();变量转储($query)+阅读关于
mysql\u real\u escape\u string()
Add
echo mysql\u error()
就在
mysql\u query()
调用之后,看看它说了什么。@zerkms投了赞成票,因为只有你提到了
mysql\u real\u escape\u string()
OP的一个侧记:看看你的键盘,在字符键下面找到那个宽键。是的,是太空。是的,它在代码中用于分隔令牌。使代码可读。啊,是的,在这里。然而,为什么不教OP如何调试他的代码呢;p需要的引号实际上是`(值得注意)。可能,但是
username
不是mysql保留字,所以反勾选它完全没有用。不,这是一个逻辑错误,但不是语法错误
where'a'='b'
是一个完全有效的SQL构造-它的计算结果将为false,不返回任何行,而
where'a'='a'
将为true,并返回所有行。我没有说这是语法错误。虽然,我本可以澄清,如果他试图运行$username显式设置为'username'的查询,并导致一个真正的布尔断言,则会返回一个资源。是的,您这样做了,查询不会返回false,因为它是一个语法有效的查询。它只会返回意外的结果,因为查询的逻辑有缺陷。不返回行的查询不是错误,它只是一个没有结果的查询——一个行计数为零的语句句柄。没错,马克,我很清楚他的查询的语法是完全正确的。OP询问他的查询是否“错误”,而不是“语法上准确”,我的回答反映出该查询是“错误的”,其中包含一个逻辑错误。无论如何,如果你不同意答案,请随意否决。没有必要在我回答的次要语义上留下争论性的评论。