在ZF2中使用MySQL持久连接

时间:2014-09-19 16:36:18

标签: php mysql zend-framework2

在ZF2上我需要使用持久的MySQL连接并重新连接,MySQL就消失了。 但我无法弄清楚应该在哪里激活MYSQL_OPT_RECONNECT参数。

我的数据库适配器定义如下:

    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=DB_NAME;host=HOST',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND        => 'SET NAMES \'UTF8\'',
        ),
        'username' => 'LOGIN',
        'password' => 'PWD',
    ),

我尝试过这样的事情:

'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => 'mysql:dbname=DB_NAME;host=HOST',
    'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND        => 'SET NAMES \'UTF8\'',
        'AUTO_RECONNECT_ON_UNSERIALIZE'  => 1,
    ),
    'options'       => array(
        'AUTO_RECONNECT_ON_UNSERIALIZE'  => 1,
    ),
    'username' => 'LOGIN',
    'password' => 'PWD',
),

没有任何作用。

如何制作这个mysql_options(& mysql,MYSQL_OPT_RECONNECT,& reconnect); 发生在某个地方?

1 个答案:

答案 0 :(得分:1)

好的,答案是:

'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => 'mysql:dbname=DB_NAME;host=HOST',
    'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND        => 'SET NAMES \'UTF8\'',
    ),
    'options'       => array(
        PDO::ATTR_PERSISTENT => true',
    ),
    'username' => 'LOGIN',
    'password' => 'PWD',
),

但使用持久连接可能不适合每一个,所以你也可以捕获任何“Mysql Server Gone Away Error”并继续通过以下方式重新连接:

 $this->tableGateway->getAdapter()->getDriver()->getConnection()->disconnect();
 $this->tableGateway->getAdapter()->getDriver()->registerConnection($this->getAdapter()->getDriver()->getConnection()->connect());
 if($this->tableGateway->getAdapter()->getDriver()->getConnection()->isConnected()) {
        return true;
 }