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返回布尔值意味着出现了错误-要么是查询中有语法错误(您的查询中有),要么是其他错误(例如,无法首先连接)。
将查询调用更改为
$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'";
即不要将列名放在单引号中。但即使这样也很危险——它会让您的代码受到SQL注入攻击。
在将mysql_query发送到mysql_num_rows之前,您没有检查它是否返回资源或FALSE。请查看此处的文档以获得正确的用法:
http://php.net/manual/en/function.mysql-query.php
在您的例子中,您向mysql_num_rows函数传递了一个FALSE,这就是您得到该错误的原因。
mysql_num_rows需要mysql资源$query_run被设置为false,因为WHERE子句中的"username"周围有单引号,导致查询出错。