DBAL 立即连接
DBAL connect immediately
在 PDO(以及 DBAL)中,如果服务器身份验证出现问题,它将抛出一个包含跟踪的异常,包括数据库用户名和密码。
不用说,这是一个问题,在 PDO 中,我会将其包装在一个 try 块中,并在没有堆栈跟踪的情况下重新抛出错误。问题已解决。
但是,DBAL 在调用第一个查询之前实际上并没有启动连接,因此它完全错过了 try 块,并在它获得的第一个机会时喷出我的数据库凭据!
我如何强制 DBAL 立即连接以便捕获任何身份验证错误?
\Doctrine\DBAL\Connection::connect()
回想起来很明显。
我的数据库是 ibm db2,所以我使用 odbc pdo 连接和 dbal。这就是我建立连接的方式,请注意 PDO 在 try catch 块中
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Query\QueryBuilder;
$connPdo = null;
try {
$connPdo = new PDO('odbc:'.SYSTEM_DSN_NAME, DB_USERNAME, DB_PASSWORD, array(
PDO::ATTR_PERSISTENT => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
} catch (PDOException $e) {
echo $e->getMessage() . '</br>';
}
$config = new Configuration();
$connectionParams = array(
'user' => DB_USERNAME,
'password' => DB_PASSWORD,
'pdo' => $connPdo,
'driverClass' =>'Doctrine\DBAL\Driver\PDOIbm\Driver',
);
$connection = DriverManager::getConnection($connectionParams, $config);
$queryBuilder = $connection->createQueryBuilder();
在 PDO(以及 DBAL)中,如果服务器身份验证出现问题,它将抛出一个包含跟踪的异常,包括数据库用户名和密码。
不用说,这是一个问题,在 PDO 中,我会将其包装在一个 try 块中,并在没有堆栈跟踪的情况下重新抛出错误。问题已解决。
但是,DBAL 在调用第一个查询之前实际上并没有启动连接,因此它完全错过了 try 块,并在它获得的第一个机会时喷出我的数据库凭据!
我如何强制 DBAL 立即连接以便捕获任何身份验证错误?
\Doctrine\DBAL\Connection::connect()
回想起来很明显。
我的数据库是 ibm db2,所以我使用 odbc pdo 连接和 dbal。这就是我建立连接的方式,请注意 PDO 在 try catch 块中
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Query\QueryBuilder;
$connPdo = null;
try {
$connPdo = new PDO('odbc:'.SYSTEM_DSN_NAME, DB_USERNAME, DB_PASSWORD, array(
PDO::ATTR_PERSISTENT => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
} catch (PDOException $e) {
echo $e->getMessage() . '</br>';
}
$config = new Configuration();
$connectionParams = array(
'user' => DB_USERNAME,
'password' => DB_PASSWORD,
'pdo' => $connPdo,
'driverClass' =>'Doctrine\DBAL\Driver\PDOIbm\Driver',
);
$connection = DriverManager::getConnection($connectionParams, $config);
$queryBuilder = $connection->createQueryBuilder();