PHP PDO:在布尔值上调用成员函数fetch()

Ala*_*ado 0 php session pdo class

所以我目前正在尝试执行PDO SELECT请求,但在执行和获取提取的数据时,会出现以下错误:

1 - Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\wamp64\www\NewKali\includes\user.inc.php on line 53    
2 - Error: Call to a member function fetch() on boolean in C:\wamp64\www\NewKali\includes\user.inc.php on line 53
Run Code Online (Sandbox Code Playgroud)

这是我调用函数的地方:

include 'includes/user.inc.php';
$userOBJ = new User;
if($userOBJ->isAdmin($_SESSION['session_u-name'])){
    AdminControl();
}
Run Code Online (Sandbox Code Playgroud)

码:

public function isAdmin($user){
    $userToGet = $user;

    $stmt = $this->Connect()->prepare("SELECT * FROM user_secure WHERE username_db=?");
    $query1 = $stmt->execute([$userToGet]);

    if(!$query1)
    {
      die("Execute query error, because: ". print_r($this->Connect()->errorInfo(),true) );
    }else{
         foreach ($query1->fetch() as $row) {
             if($row['admin_db'] == 1){
                return true;
             } else {
                return false;
             }
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个错误说我没有处理PDO错误,我认为我已经处理了我的代码中的任何PDO错误,但不知何故仍然被检测到,因为我没有这样做...(纠正我,如果错误)

第二个错误表明调用PDO-> fetch()返回一个布尔值,但是我正在请求数据,所以它无法继续使用以下代码......我不明白为什么会显示......" username_db"查询中的var与我在数据库中的相同.

在与上面函数相同的文件中,我有下一个函数,在调用时,它可以正常运行

public function RegisterUser($user, $pwd, $mail){
    $u_Insert = $user;
    $p_Insert = $pwd;
    $m_Insert = $mail;

    $stmt = $this->Connect()->prepare("INSERT INTO user_secure(username_db, password_db) VALUES (?,?)");
    $query1 = $stmt->execute([$u_Insert, $p_Insert]);

    $stmt = $this->Connect()->prepare("INSERT INTO user_info(mail_db) VALUES (?)");
    $query2 = $stmt->execute([$m_Insert]);

    if($query2 && $query1){
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么东西我不见了吗?我已经检查了这个帖子,但我仍处于准确位置......

感谢您的时间

(我还在学习PDO,抱歉,如果我的代码不干净)

key*_*ysl 5

这条线是其中一个原因.execute返回true或false,指示查询是成功还是失败.

$query1 = $stmt->execute([$userToGet]);
Run Code Online (Sandbox Code Playgroud)

从某种意义上说,$ query1是一个布尔值.现在在这些行中,您正在尝试从$ query1访问fetch方法,这是一个布尔值.

  foreach ($query1->fetch() as $row) {
         if($row['admin_db'] == 1){
            return true;
         } else {
            return false;
         }
     }
Run Code Online (Sandbox Code Playgroud)

要获取行,您需要像这样写:

$results = $stmt->fetch();
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下:

  foreach ( $stmt->fetch() as $row) {
         if($row['admin_db'] == 1){
            return true;
         } else {
            return false;
         }
     }
Run Code Online (Sandbox Code Playgroud)