PHP错误mysql\u num\u行返回布尔错误。我的问题错了吗?
mysql_num_rows()希望参数1是资源,布尔值在第33行中给出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);
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()
Addecho 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询问他的查询是否“错误”,而不是“语法上准确”,我的回答反映出该查询是“错误的”,其中包含一个逻辑错误。无论如何,如果你不同意答案,请随意否决。没有必要在我回答的次要语义上留下争论性的评论。