我有多个类,其中大多数需要连接到数据库,
如何只设置一次PDO选项/主机/数据库名称等,然后在每个类中使用它,同时牢记以下几点:
$db=null
之后关闭PDO连接,所以我不能简单地只使用$db = new PDO(...)
然后将$db
传递给我的班级我想跳过每个需要连接到数据库的类中的内容:
<?php
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
答案 0 :(得分:0)
如果您想完全控制打开和关闭连接,那么我建议我们只集中$dsn
,$user
,$pass
和$options
变量。我假设还有$host
,$db
和$charset
之类的变量,您没有向我们透露,但可以添加它们。
让我们将此文件称为global_db.php
:
<?php
$host = "127.0.0.1";
$db = "mydb";
$charset = "UTF-8";
$user = "root";
$pass = "";
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
看起来我们已经准备好所有商品,请记住,我没有对此进行测试,因此我们可能会遇到一两个语法错误。
现在在我们要打开连接的类或其他php文件中。
让我们将此页面称为fooClass.php
<?php
require_once 'global_db.php';
class FooClass {
public function __construct() {
try {
$pdo = new PDO(
$GLOBALS['dsn'],
$GLOBALS['user'],
$GLOBALS['pass'],
$GLOBALS['options']);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
}
}
应该可以解决问题,或者至少可以让您大致了解自己的路线从这里出发。还有许多其他方法可以完成相似但不需要过于复杂的事情。
nJoy!