PDOException не был пойман - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над простым входом в систему с mysql, используя pdo. Все работает нормально, так что теперь я сосредоточен на обработке ошибок. Но есть проблема. В моем dbconfig я добровольно сохранил неправильный psw/email/dbname, чтобы создать ошибку.

<?php
session_start();
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'Captive');
define('DB_PASSWORD', 'arancione');
define('DB_DATABASE', 'geochimie');
function get_db() {
    $dbhost=DB_SERVER;
    $dbuser=DB_USERNAME;
    $dbpass=DB_PASSWORD;
    $dbname=DB_DATABASE;
    try {
        $dbConnection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
        $dbConnection->exec("set names utf8");
        $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $dbConnection;
    }
    catch (PDOException $e) {
        header("../pages/errore.php?errore=dbconfig");
    }
}
?>

Однако невозможно обнаружить ошибку, поэтому, когда я готовлю инструкцию с использованием соединения db, возвращаемого get_db() I получить это:

Uncaught Ошибка: вызов функции-члена prepare () со значением NULL

Вот сценарий php, где я подготавливаю stmt:

<?php 
class Admin {
    public function userLogin( $email,$password)
    {
        try{
            $db = get_db();
            $stmt = $db->prepare('SELECT id FROM admin WHERE email=:email AND psw=:hash_password');
            $stmt->bindParam("email", $email,PDO::PARAM_STR) ;
            $stmt->bindParam("hash_password", $password,PDO::PARAM_STR) ;
            $stmt->execute();
            $count=$stmt->rowCount();
            $data=$stmt->fetch(PDO::FETCH_OBJ);
            $db = null;
            if($count)
            {
                $_SESSION['uid']=$data->id;
                return true;
            }
            else
            {
                return false;
            }
        }
        catch(PDOException $e) {
            header("Location: ../pages/errore.php?errore=db");
        }


    }
}
?>

Как вы можете видеть, есть еще одна попытка, но она не работает так же. Большое спасибо за внимание!

1 Ответ

0 голосов
/ 17 апреля 2020

Ок, ребята, похоже, мне нужно было добавить d ie () или exit () после заголовка в блоках catch. Теперь я могу правильно обрабатывать ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...