DBAL立即连接

时间:2015-11-20 18:43:16

标签: php pdo dbal

在PDO(以及DBAL)中,如果在使用服务器进行身份验证时出现问题,则会抛出包含数据库用户名和密码的跟踪的异常。

毋庸置疑,这是一个问题,在PDO中我会将其包装在try块中并在没有堆栈跟踪的情况下重新抛出错误。问题解决了。

但是,在调用第一个查询之前,DBAL实际上并未实际启动连接,因此它完全错过了try块并在第一次获得数据库凭据时将其释放!

如何强制DBAL立即连接,以便捕获任何身份验证错误?

2 个答案:

答案 0 :(得分:0)

\Doctrine\DBAL\Connection::connect()

回想起来很明显。

答案 1 :(得分:0)

我的数据库是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();