PDO 简介——数据库连接和连接管理

时间:2021-02-01 19:41:18

连接是通过实例化PDO基类建立的。对建立连接来说,你使用哪个数据库驱动并没有关系,你只管用PDO这个类名就行了。PDO类的构造器接受一个可以指定数据源(DNS)的参数和可选的数据库用户名、密码参数。

例1:连接到MySQL:

  1. $dbh = new PDO('mysql:host=localhost;dbname=test'$user$pass);

如果发生了错误,一个PDOException异常对象将被抛出。如果你想处理这个错误,你应该捕获这个异常,或者你也可以选择将它交给一个通过set_exception_handler()设置的应用程序全局异常处理器。

例2:连接错误处理

  1. try {
  2.     $dbh = new PDO('mysql:host=localhost;dbname=test'$user$pass);
  3.     foreach ($dbh->query('SELECT * from FOO'as $row) {
  4.         print_r($row);
  5.     }
  6.     $dbh = null;
  7. } catch (PDOException $e) {
  8.     print "Error!: " . $e->getMessage() . "";
  9.     die();
  10. }

警告:
如果你的应用程序没有捕获从PDO构造器中抛出的异常,Zend引擎就会做出响应终端脚本的执行并显示一条跟踪信息。这条跟踪信息有可能会暴露完整的数据库连接信息,包括用户名和密码。捕获这个异常是你的职责,无论是明确捕获(通过一个catch语句)还是通过set_exception_handler()隐含捕获。

成功建立数据库连接之后,一个PDO类的实例就返回到了你的脚本中。连接在PDO对象的生存期内会一直保持活动状态。要关闭这个连接,你需要通过删除所有指向它的引用来销毁这个对象。你可以通过向指向这个对象的变量赋一个NULL值做到这一点。如果你没有明确地这样做,PHP会在脚本结束时自动关闭这个连接。

  1. //关闭连接:
  2. $dbh = new PDO('mysql:host=localhost;dbname=test'$user$pass);
  3. // use the connection here
  4. // do something.
  5. // and now we're done; close it
  6. $dbh = null;

许多Web应用会因为使用了向数据库的持久连接而得到优化。持久连接不会在脚本结束时关闭,相反它会被缓存起来并在另一个脚本通过同样的标识请求一个连接时得以重新利用。持久连接的缓存可以使你避免在脚本每次需要与数据库对话时都要部署一个新的连接的资源消耗,让你的Web应用更加快速。

  1. //持久连接
  2. $dbh = new PDO('mysql:host=localhost;dbname=test'$user$passarray(
  3.     PDO::ATTR_PERSISTENT => true;
  4. ));