我习惯使用过程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')或类似的。
我遇到的问题如下:
我正在写一本名为PHP Master:Writing Cutting Edge Code的书。 http://www.sitepoint.com/books/phppro1/这完全省略了关于在使用对象后关闭连接/销毁对象的任何引用。
此外,我查看了在线教程,他们都使用PDO内联连接到数据库,而不是使用单独的数据库连接器。我不满意的原因有很多:
有人可以推荐更好的资源吗?有人可以建议最佳做法是什么?
非常感谢
答案 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_conn
中null
$db_conn = null; // connection closed.
PDO在这里有一个手册http://php.net/manual/en/book.pdo.php,这是开始更好地了解PDO的良好开端。