我的项目在"db.class.php"中使用PDO异常处理,这是所有库的全局文件,由于影响而无法更改。
在某个时间点,应用程序正在尝试连接新数据库,如果无法访问新数据库,则脚本应忽略此错误并继续执行。
新的数据库连接异常在"db.class.php"中处理,当我尝试在连接新数据库时处理异常时,不知何故异常处理不起作用,脚本在这一点上停止。
如果我在连接到新数据库时没有处理异常,在这种情况下脚本也停止执行。
要求是即使在这种情况下由于任何问题而未连接数据库,脚本也应继续执行,忽略错误。
法典:
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');
}
数据库.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 );
}
db.class.php
文件抛出一个DbEX
异常,这可能是您应该捕获的异常,而不是通用PDOException
。
假设这是您的自定义异常名称 DbEx
/**
* Define a custom exception class
*/
class DbEx extends Exception
{
}
然后你有数据库类
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 );
我认为您需要仔细检查错误消息,该错误可能来自此代码本身。