当设置为NULL时,具有扩展PDOStatement的PDO无法断开连接

时间:2015-09-04 02:05:21

标签: php mysql pdo connection pdostatement

在PHP 5.5.22和5.5.25中测试

当使用扩展PDOStatement的PDO时,MySQL会保持连接,直到PHP脚本完成为止。

use PDO;

$dbinfoCode = array(
    'userid' => 'userid',
    'password' => 'password',
    'engine' => 'mysql',
    'host' => '192.168.100.2',
    'database' => 'test',
);


for ($i = 0; $i < 10000; $i++) {

    $dsn = sprintf("%s:host=%s;dbname=%s", $dbinfo['engine'], $dbinfo['host'], $dbinfo['database']);

    $pdo = new PDO($dsn, $dbinfo['userid'], $dbinfo['password'], $options);
    $pdo->setAttribute (PDO::ATTR_STATEMENT_CLASS, array ('PDOStatement2', array($pdo)));
    $pdo = null;

}

class PDOStatement2 extends PDOStatement {
}

我可以看到越来越多的堆积&#34;睡眠&#34; MySQL查询的进程。最后,MySQL抛出错误&#34;连接太多&#34;。

SHOW PROCESSLIST;

如果没有关于PDO::ATTR_STATEMENT_CLASS的setAttribute,则MySQL连接将按正常工作方式断开连接。

    $pdo = new PDO($dsn, $dbinfo['userid'], $dbinfo['password'], $options);
    //$pdo->setAttribute (PDO::ATTR_STATEMENT_CLASS, array ('PDOStatement2', array($pdo)));
    $pdo = null;

我不知道这是一个错误还是有其他解决方案。

0 个答案:

没有答案