使用 PDO 连接到数据库的函数


Function to connect to database using PDO

我必须在数据库类中创建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();

如何知道是否已连接到数据库?

如果出现连接错误,PDO将引发异常。

正确吗?

不,这不是一个好主意,因为该方法被称为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()函数,您必须使用静态变量 ho 保存 PDO 的单个实例。

最近,我花时间在文章"您的第一个数据库包装器的儿童疾病"中编译了数据库包装器的所有常见错误。您可能会发现此阅读非常有用。