PHP PDO: вызов функции-члена fetch () для логического значения - PullRequest
0 голосов
/ 16 ноября 2018

Итак, я сейчас пытаюсь выполнить запрос 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 () возвращает логическое значение, но я запрашиваю данные, поэтому он не может продолжить выполнение следующего кода ... Я не понимаю, почему это показывает ... Var "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;
    }
}

Есть что-то, что я пропускаю? Я уже проверил эту тему , но все еще в точном положении ...

Спасибо за ваше время

(я все еще изучаю PDO, извините, если мой код не чистый)

1 Ответ

0 голосов
/ 16 ноября 2018

Эта строка здесь является одной из причин. 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;
         }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...