繁体   English   中英

尝试从查询中获取查询结果作为PHP中的PDO对象

[英]Trying to fetch results from a query as a PDO Object in PHP

问题:因此,每当我尝试登录时,它都会返回以下错误: 注意:尝试在第191行的/butler/Classes/users/users.php中获取非对象的属性“ user_id”

发生这种情况是因为我尝试从表中检索user_id的fetch方法为空,尽管fetchColumn()函数显示在查询中找到1行。

我已经检查了数据库表,并且命名正确。 html表单也正确传递了参数,这就是为什么我没有发布代码的那部分。

登录页面php

if (!empty($_POST['btnLogin'])) {

    $username = trim($_POST['username']);
    $password = trim($_POST['password']);

    if ($username == "") {
        $login_error_message = 'Username field is required!';
    } else if ($password == "") {
        $login_error_message = 'Password field is required!';
    } else {
        $user_id = $app->Login($username, $password); // check user login
        if($user_id > 0)
        {
            $_SESSION['user_id'] = $user_id; // Set Session
            header("Location: dashboard/layout.php"); // Redirect user to the profile.php
        }
        else
        {
            $login_error_message = 'Invalid login details!';
        }
    }
}

功能登录

public function Login($username, $pass)
        {
            try {
                $db = DB();
                $query = $db->prepare("SELECT user_id FROM start_users WHERE (user_start= :username) AND (psw= :pass) ");
                $query->bindParam("username", $username, PDO::PARAM_STR);
                //$enc_password = hash('sha256', $password);
                $query->bindParam("pass", $pass, PDO::PARAM_STR);
                $query->execute();
                if ($query->fetchColumn() > 0) {
                    $result = $query->fetch(PDO::FETCH_OBJ);
                    echo 'resultado'.$result.'   ';
                    print_r($query->errorInfo());

                    return $result->user_id;
                } else {
                    return false;
                }
            } catch (PDOException $e) {
                exit($e->getMessage());
            }
        }

您打给

if ($query->fetchColumn() > 0) {

正在检索该行,因此下一个调用

$result = $query->fetch(PDO::FETCH_OBJ);

正在尝试读取另一行,我认为该行不存在。

您应该只打一个电话

if ($result = $query->fetch(PDO::FETCH_OBJ)) {

我还建议您研究如何使用password_hash,因为当前方法使用的是不推荐使用的普通密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM