使用 PDO 连接数据库的函数

Function to connect to database using PDO

我必须在数据库 class 中创建 getConnection 函数。该函数应该使用 PDO 对象连接到数据库并返回它。 我有这样的东西:

class Database {

public function getConnection() {

    $result = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
        return $result;

    }

}

是否正确?我怎么知道我是否连接到数据库?

如果连接尝试失败,PDO 将抛出异常,因此您可以像这样对其进行规范化:

class Database {
    private $_conn = null;
    public function getConnection() {
        if (!is_null($this->_conn)) {
            return $this->_conn
        }
        $this->_conn = false;
        try {
            $this->_conn = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
        } catch(PDOException $e) { }
        return $this->_conn;
    }
}
$db = new Database();
$conn = $db->getConnection();
if (!$conn) {
    die("Error connecting to the database");
}
$conn->whatever();

How can i know if i'm connected to database?

如果连接错误,PDO 将抛出异常。

Is it correct?

不,这不是一个好主意,因为该方法被称为 getConnection,而实际上它 创建 一个连接。并且 public 属性 要求在应用程序代码中调用它,导致来自同一脚本的 多个连接

此外,您应该始终将PDO 设置为异常模式。你也应该在 DSN 中设置字符集。

取决于此功能的建议用途,代码可能是

protected function connect()
{
    $pdo = new PDO('mysql:host=localhost;dbname=demo;charset=utf8', 'root', '');
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    return $pdo;
}

如果它打算在构造函数中只使用一次。

而对于 getConnection() 函数,您必须使用静态变量来保存 PDO 的单个实例。

最近我花时间整理了文章Your first DB wrapper's childhood diseases中数据库包装器的所有常见错误。您可能会发现这篇文章非常有用。