PDO 连接与连接管理

Posted ryanzheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO 连接与连接管理相关的知识,希望对你有一定的参考价值。

连接是通过创建 PDO 基类的实例而建立的。不管使用哪种驱动程序,都是用 PDO 类名。

构造函数接收用于指定数据库源(所谓的 DSN)以及可能还包括用户名和密码(如果有的话)的参数。

 

连接到 mysql

<?php
$dbh = new PDO(mysql:host=localhost;dbname=test, $user, $pass);
?>

如果有任何连接错误,将抛出一个 PDOException 异常对象。如果想处理错误状态,可以捕获异常,

或者选择留给通过 set_exception_handler()设置的应用程序全局异常处理程序。

 

处理连接错误

<?php
try {
    $dbh = new PDO(mysql:host=localhost;dbname=test, $user, $pass);
    foreach($dbh->query(SELECT * from FOO) as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

 

连接数据成功后,返回一个 PDO 类的实例给脚本,

此连接在 PDO 对象的生存周期中保持活动。

要想关闭连接,需要销毁对象以确保所有剩余到它的引用都被删除,可以赋一个 NULL 值给对象变量。

如果不明确地这么做,PHP 在脚本结束时会自动关闭连接。

 

 关闭一个连接

<?php
$dbh = new PDO(mysql:host=localhost;dbname=test, $user, $pass);
// 在此使用连接


// 现在运行完成,在此关闭连接
$dbh = null;
?>

 

很多 web 应用程序通过使用到数据库服务的持久连接获得好处。持久连接在脚本结束后不会被关闭,且被缓存,

当另一个使用相同凭证的脚本连接请求时被重用。持久连接缓存可以避免每次脚本需要与数据库回话时建立一个新连接的开销,从而让 web 应用程序更快。

 

持久化连接

<?php
$dbh = new PDO(mysql:host=localhost;dbname=test, $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>

 

如果想使用持久连接,必须在传递给 PDO 构造函数的驱动选项数组中设置 PDO::ATTR_PERSISTENT 。

如果是在对象初始化之后用 PDO::setAttribute() 设置此属性,则驱动程序将不会使用持久连接。

以上是关于PDO 连接与连接管理的主要内容,如果未能解决你的问题,请参考以下文章

在 PDO 准备语句中将查询与 if else 连接

php和Pdo包括与其他页面的连接[重复]

php和Pdo包括与其他页面的连接[重复]

PDO 持久连接缓存要求

pdo学习笔记

是否可以将 Doctrine 与持久 PDO 连接一起使用?