PDO帮助 - 关闭连接&有一个单独的连接文件

时间:2012-09-15 17:04:57

标签: php mysql pdo database-connection

我习惯使用过程mysql方法访问mysql数据库。我是初学者 - 中级程序员。

我正在尝试学习PDO api,但讨论使用PDO的所有资源都显示连接字符串,用户名和密码。

e.g。

<?php

try {
    $db_conn = new PDO('mysql:host=localhost;dbname=databaseName','username', 'password');  
} 
catch (PDOException $e) {
    echo 'Could not connect to database';
}


$sql = 'SELECT * FROM Products';
$stmt = $db_conn->prepare($sql);

...
...
...

?>

我想要什么,并认为更好的编程是将我的PDO连接放入一个新文件。然后我想运行一个SQL查询,我require_once('PDO.php')或类似的。

我遇到的问题如下:

  1. 如何关闭连接?简单地$ db_conn = null; ??
  2. 我应该在每次运行查询后关闭连接,然后重新打开连接吗?
  3. 我应该关闭连接,还是在用户关闭浏览器时会自动销毁?
  4. 我正在写一本名为PHP Master:Writing Cutting Edge Code的书。 http://www.sitepoint.com/books/phppro1/这完全省略了关于在使用对象后关闭连接/销毁对象的任何引用。

    此外,我查看了在线教程,他们都使用PDO内联连接到数据库,而不是使用单独的数据库连接器。我不满意的原因有很多:

    1. 我必须输入用户名&amp;每次都要连接的密码。
    2. 如果我让开发人员看一下代码/编写一些代码,他们都可以访问数据库。
    3. 如果我更改了数据库用户名&amp;密码,然后需要更新连接到数据库的每个文件。
    4. 有人可以推荐更好的资源吗?有人可以建议最佳做法是什么?

      非常感谢

2 个答案:

答案 0 :(得分:0)

查询后不要关闭连接,只需将其打开即可进行下一次查询。当PHP存在且您的页面显示时,连接将自动关闭。

将db内容放在单独的文件中并包含它是一个好主意。

更好的是,将所有数据库内容放入正在使用的类中。

查看pdo php page。虽然不是最好的例子,但它们应该让你开始。

答案 1 :(得分:0)

关于如何存储数据库名称,用户名和密码的问题与PDO的功能无关。这是一个实现选择。您使用程序功能的方式也可以应用于PDO,不同之处在于,使用PDO可以使用对象。

为简单起见,在一个函数或类中存储对象的PDO创建,您可以在其中随时创建PDO实例,例如。

function createPDO($cfg) {
  try {
    return new PDO("mysql:host=".$cfg['host'].",port:".($cfg['port']).";dbname=".($cfg['name']).";",$cfg['username'], $cfg['password']);
  } catch(PDOException $e) {
    // handle exceptions accordingly
  }
}

您可以将这些集中在您想要包含的任何PHP文件中,就像您使用过程函数一样。

您有两种选择,要么将所有相关数据库信息放在createPDO中,要么使用类似配置($cfg)变量来存储所有这些信息。

$config = array();
$config['db'] = array(
  'host' => 'localhost',
  'name' => 'databse',
  'username' => 'userx',
  'password' => 'passy'
  /* .. etc */
)

使用createPDO功能将如下

$db_conn = createPDO($config['db']);

对于关闭连接,在PHP退出执行后,与数据库建立的每个连接都会自动断开连接。但是,如果您愿意,可以通过设置您为其指定的PDO对象的变量来关闭连接,在此示例中(以及在您的$db_connnull

$db_conn = null; // connection closed.

PDO在这里有一个手册http://php.net/manual/en/book.pdo.php,这是开始更好地了解PDO的良好开端。