您好,欢迎光临! 推荐您使用Chrome浏览器访问本站。

PHP MySQL PDO持久化连接与关闭

PDO持久化连接的方式来访问数据库,代码如下:

<?php
$type = 'mysql'; //数据库类型
$db_name = 'test'; //数据库名
$host = '127.0.0.1';
$username = 'root';
$password = 'ready';

$dsn = "$type:host=$host;dbname=$db_name";
try {
    //建立持久化的PDO连接
    $pdo = new PDO($dsn, $username, $password, array(PDO::ATTR_PERSISTENT => true));    
} catch (Exception $e) {
    die('连接数据库失败!');    
}
$stmt = $pdo->query('SELECT id, body FROM demo');
while ($row = $stmt->fetch()) {
    echo "id=$row[0],body=$row[1]<br/>";
}
$pdo = null;
?>

建立PDO持久化连接只需要在PDO构造函数的第4个参数(该参数为可选参数,是一个包含多个驱动选项参数的数组)中设置键名PDO::ATTR_PERSISTENT的值为true即可。

注意:
如果想使用持久连接,必须在传递给PDO构造函数的驱动选项数组中设置PDO::ATTR_PERSISTENT。如果是在对象初始化之后用PDO::setAttribute()设置此属性,则驱动程序将不会使用持久连接。

如果使用PDO ODBC驱动且ODBC库支持ODBC连接池(有unixODBC和Windows两种做法;可能会有更多),建议不要使用持久的PDO连接,而是把连接缓存留给ODBC连接池层处理。ODBC连接池在进程中与其他模块共享;如果使用了PDO持久连接,则该连接绝不会被返回到ODBC连接池,导致创建额外的连接来服务其他模块。

附上一个关闭pdo连接的方法:

/*
 * Close Mysql Connection (PDO)
 */
$pdo_mysql_close = function (PDO $connection) {
 $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1);
 $list = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC);
 foreach ($list as $thread) {
  if ($thread['Info'] === $query) {
   return $connection->query('KILL ' . $thread['Id']);
  }
 }
 return false;
};
$pdo_mysql_close($conn);

参看:
http://www.365mini.com/page/php-persistent-connection.htm
https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
http://codego.net/61869/

您可能也喜欢