我的项目在'db.class.php'中使用PDO异常处理,这是所有库的全局文件,由于影响而无法更改。
在某些时候,应用程序正在尝试连接新数据库,如果无法访问新数据库,则脚本应忽略此错误并继续执行。
新的数据库连接异常在'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 );
}
答案 0 :(得分:1)
db.class.php
文件正在抛出DbEX
异常,这可能是您应该捕获的异常,而不是通用PDOException
。
答案 1 :(得分:0)
假设这是您的自定义异常名称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 );
我认为您需要仔细检查错误消息可能来自此代码本身。