我刚刚开始使用PDO,想知道如何最好地声明数据库连接?
最佳实践是创建如下脚本,例如.php称为 config
配置.php
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>
然后有例子.class.php
<?php
include config.php;
class Example {
public function fetch() {
$data = $dbh->query('SELECT * FROM myTable WHERE name = ' . $conn->quote($name));
// do stuff
}
}
?>
对我所有的课程都这样做吗?或者这会建立多个连接吗?我希望有尽可能少的连接。
您很接近,但您的fetch
函数无法正常工作$dbh
因为它超出了其范围。
您可以全球化它,但更好的解决方案是在实例化时将处理程序传递给您的类
class Example {
/** @var 'PDO */
protected $pdo;
public function __construct('PDO $pdo) {
$this->pdo = $pdo;
}
}
$class = new Example($dbh);
这是最佳做法。这样,设置和命名数据库指针的后勤工作就无关紧要了。你的类定义了它将如何接收它,你使用你传递的指针的实例。
您的示例看起来不错,它只会创建一个持久连接。
但是,您应该将$dbh
传递给 Example
的__construct
,并在以后执行$this->dbh
,而不是依赖$dbh
全局。
为了避免在所有需要访问的类中都需要这样做,您可以实现一个处理数据库和其他类inherit
的类,或者实现一个Trait
。
为了保持代码干净有序,您可以创建一个"DbManager"类并实例化 PDO、创建查询和其他方法等。您可以使用配置.php来存储应用程序配置。