【问题标题】:DBAL connect immediatelyDBAL 立即连接
【发布时间】:2016-02-23 08:44:03
【问题描述】:

在 PDO(以及 DBAL)中,如果与服务器进行身份验证时出现问题,它将引发异常,其中包含包括数据库用户名和密码在内的跟踪。

不用说,这是一个问题,在 PDO 中,我会将它包装在一个 try 块中,然后在没有堆栈跟踪的情况下重新抛出错误。问题解决了。

但是,DBAL 直到调用第一个查询时才真正启动连接,因此它完全错过了 try 块,并在第一次有机会时喷出我的数据库凭据!

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

【问题讨论】:

    标签: php pdo dbal


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      \Doctrine\DBAL\Connection::connect()

      回想起来很明显。

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 1970-01-01
        • 2020-02-07
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-30
        • 1970-01-01
        相关资源
        最近更新 更多