捕捉pdo异常并继续执行?

dz6r00yl  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(585)

我的项目使用“db.class.php”中的pdo异常处理,这是所有库的全局文件,不能因影响而更改。
在某个时间点,应用程序正在尝试连接一个新数据库,如果无法访问新数据库,则脚本应忽略此错误并继续执行。
新的db连接异常在'db.class.php'中处理,当我尝试在连接新数据库时处理异常时,不知何故异常处理不起作用,脚本在该点停止。
如果我在连接到新数据库时没有处理异常,在这种情况下,脚本也停止执行。
要求即使db由于任何问题没有连接,脚本也应该忽略错误继续执行。
代码:

try {   
        $newDb = new DB(DB_HOST_new, DB_NAME_new, DB_USER_new, DB_PASS_new, DB_UTC_TIMEZONE);
        $isDbSsConnected = true ;
    } catch (PDOException $exx)  {          
        //throw new Exception('Unable to connect');
    }

db.class.php文件

try {
            $connection = new PDO( $dsn, $username, $password );
            $connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

            if ( $utc ) {
                $this->setUtc( $connection );
            }

            $this->connection = $connection;
            self::$connections[$dsn][$username] = self::$connectionCachingEnabled ? $this->connection : NULL;

        } catch ( PDOException $ex ) {
            throw new DbEx( "Initialize Failed: DSN = " . $dsn, DbEx::INIT_FAILED, $ex );
        }
qjp7pelc

qjp7pelc1#

假设这是您的自定义异常名称dbex

/**
 * Define a custom exception class
 */
class DbEx extends Exception
{
}

那你就有db课了

class DB
{
    public function __construct($host, $name, $username, $password, $timezone)
    {
        $dsn = "mysql:host=$host;dbname=$name";
        $username = $username;
        $password = $password;
        $utc = $timezone;

        try {
            $connection = new PDO( $dsn, $username, $password );
            $connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        } catch ( PDOException $ex ) {
            throw new DbEx("Initialize Failed: DSN");
        }
    }
}

现在您有了一个页面/文件,您将从类db调用该连接

try {   
    $newDb = new DB('localhost', 'test', 'root', '', true);
    $isDbSsConnected = true ;
} catch (DbEx $exx)  {          
    // catch error from DB class
    echo "script should go here ignoring the error";
}

上面的代码将按照您的要求工作,但是,您的代码在这一部分

throw new DbEx( "Initialize Failed: DSN = " . $dsn, DbEx::INIT_FAILED, $ex );

我认为您需要再次检查错误消息错误可能来自此代码本身。

ggazkfy8

ggazkfy82#

这个 db.class.php 文件正在抛出 DbEX 异常可能是您应该捕获的异常,而不是泛型 PDOException .

相关问题