0

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

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

例如

<?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. 我应该关闭连接还是在用户关闭浏览器时自动销毁?

我正在阅读一本名为 PHP Master: Writing Cutting Edge Code 的书。http://www.sitepoint.com/books/phppro1/这完全省略了任何关于关闭连接/在使用后销毁对象的参考。

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

  1. 我每次都必须输入用户名和密码才能连接。
  2. 如果我让开发人员查看代码/编写一些代码,他们都可以访问数据库。
  3. 如果我更改数据库用户名和密码,则连接到数据库的每个文件都需要更新。

有人可以推荐一个更好的资源吗?任何人都可以建议这样做的最佳实践方法是什么?

非常感谢

4

2 回答 2

0

您不会在查询后关闭连接,只需将其保持打开状态以进行下一个查询。当 PHP 存在并显示您的页面时,连接将自动关闭。

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

更好的是,把你所有的数据库东西放在一个使用的类中。

看看pdo php 页面。虽然不是最好的例子,但它们应该可以帮助您入门。

于 2012-09-15T17:11:35.537 回答
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 文件中,就像您使用过程函数一样。

您有两个选择,要么将所有相关的数据库信息放在 .c 中createPDO,要么使用 config( $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 的好开始。

于 2012-09-15T17:28:04.993 回答