尝试从 PHP 中的 PDO 对象形式的查询中获取结果

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

问题: 所以每当我尝试登录时 returns 出现以下错误: 注意:试图在第 191

行 /butler/Classes/users/users.php 中获取非对象的 属性 'user_id'

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

我已经检查了数据库 table 并且命名是正确的。 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)) {

我还建议您查看 ,因为您当前的方法是使用不推荐的普通密码。