【问题标题】:Object of class mysqli_result could not be converted to int and all entries return true [closed]类 mysqli_result 的对象无法转换为 int 并且所有条目都返回 true [关闭]
【发布时间】:2013-10-26 14:17:05
【问题描述】:

我正在做一个简单的登录。一种逻辑是,如果用户名不存在,那么他们会收到一条错误消息,然后他们会被重定向到注册页面。 但是,当我运行我的代码时,我不断收到上述错误,无论我输入什么作为用户名,它仍然返回为真。

   $res = $mysqli->query("SELECT Count(`userID`) FROM `users` WHERE `UserName` = '$username'");
    if($res ==0){
        return false;
    }
    else
        return true;
}

我在开发数据库时控制数据库,因此知道其中包含哪些用户名。我的印象是,如果我输入数据库中的用户名,则计数将为 1,因此将返回 true,同样,如果我输入的名称不在数据库中,则计数将为 0,因此 $res会是假的吗?

【问题讨论】:

标签: php mysqli


【解决方案1】:

你还是要数数! mysqli::query 的返回值不是整数,而是结果对象。

if ($res->num_rows == 0) {
    return false;
} else {
    return true;
}

冗长地创建返回值被认为不是最好的编码风格。

return ($res->num_rows > 0); // will be true if result is bigger than 0

这就引出了一个问题:如果返回了两行或多行怎么办?

【讨论】:

  • 感谢 Sven,我将其更改为 Select * From users Where username = $username 从而确保如果用户输入数据库中的用户名,我有一个结果行。根据我想到的两行或多行的可能性,我需要在我的登录上设置逻辑,以防止用户使用数据库中已有的用户名进行注册。最后感谢您指出正确的编码方式。
【解决方案2】:

可以这样做:

return ($res && $res->num_rows >= 1) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多