首页 > 解决方案 > PDOException 没有被捕获

问题描述

我正在使用 pdo 使用 mysql 进行简单的登录。一切正常,所以现在我专注于错误处理。但是有一个问题。在我的错误中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()我得到以下信息:

未捕获的错误:在 null 上调用成员函数 prepare()

这是我准备 stmt 的 php 脚本:

<?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");
        }


    }
}
?>

如您所见,还有另一个 try-catch,但它的工作方式不同。非常感谢您的关注!

标签: phppdo

解决方案


好的,看来我需要在 catch 块的标题之后添加 die() 或 exit() 。现在我可以正确处理错误了。


推荐阅读