当前位置: 首页 > 技术随笔 > 使用PDO持久化连接

使用PDO持久化连接

无论是何种编程语言,几乎都要经常与各种数据库打交道。不过,众所周知的是,在程序与数据库之间建立连接是一件比较耗费资源的事情,因此编程技术领域的许多专家、前辈们就设想并提出了各种解决方案,以减少不必要的资源浪费,从而提高程序对数据库的访问能力。

在程序与数据库的许多连接方案中,最广为人知、也是应用得最广泛的解决方案就是使用数据库连接池。不过,我们今天要介绍的主角并不是连接池,毕竟自行编写代码创建连接池或者使用第三方现有的连接池解决方案,都显得有些麻烦。在PHP中,我们还可以使用一种更为简单直接的数据库连接方案——PDO持久化连接

关于PDO本身,这里就不再多作介绍了,大家可以参考之前的文章《使用PDO连接多种数据库》以及PHP官方网站上的相关信息。

PDO持久化连接的使用非常简单。同样以文章《使用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即可。除此之外,其使用方式与非持久化连接保持一致。

在PHP中,我们使用new PDO()语句创建一个数据库连接,当连接数据库成功后,将会得到一个PDO类的实例,此连接在PDO对象的生存周期中保持活动。要想关闭连接,需要销毁对象以确保所有剩余到它的引用都被删除,可以赋一个NULL值给对象变量。如果不明确地这么做,PHP在脚本结束时会自动关闭连接。

不过,当我们创建的数据连接为PDO持久化连接时,该连接在使用完毕或者PHP脚本结束后并不会被关闭,而是被PHP缓存起来。当另一个使用相同凭证(主机、端口、数据库名、用户名、密码等信息完全一致)的PHP脚本请求建立连接时,PHP将直接返回之前被缓存起来的连接,从而达到连接重用。持久连接缓存可以避免每次访问数据库都要建立一个新连接的开销,从而让web应用程序更快。

注意

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

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

17 5
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。