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

时间:2018-11-16 02:38:08

标签: php class session pdo

所以我当前正在尝试执行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

这是我所谓的函​​数:

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

代码:

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;
             }
         }
    }
}

第一个错误表明我没有处理PDO错误,我认为我已经在代码中处理了任何PDO错误,但是由于我没有这样做,仍然以某种方式被检测到...(正确如果我错了我

第二个错误指​​出调用PDO-> fetch()返回一个布尔值,但是我正在请求数据,因此无法继续以下代码... 我不明白为什么会这样显示...查询中的“ username_db”变量与我的数据库中的变量相同。

在与上述函数相同的文件中,我具有下一个函数,当调用该函数时,效果很好

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;
    }
}

有什么我想念的吗? 我已经检查了这个thread,但我仍然在正确的位置...

谢谢您的时间

(我仍在学习PDO,如果我的代码不干净,对不起)

1 个答案:

答案 0 :(得分:5)

此行是原因之一。 execute返回true或false,指示查询是成功还是失败。

$query1 = $stmt->execute([$userToGet]);

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

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

要获得该行,您需要这样写:

$results = $stmt->fetch();

或您的情况:

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