使用PDO连接数据库的功能

时间:2016-03-16 08:03:18

标签: php pdo database-connection

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

class Database {

public function getConnection() {

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

    }

}

这是对的吗?我怎么知道我是否连接到数据库?

2 个答案:

答案 0 :(得分:2)

如果连接尝试失败,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();

答案 1 :(得分:2)

  

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

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

  

这是对的吗?

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

此外,您应始终在异常模式下设置PDO。你也应该在DSN中设置charset。

取决于建议使用此函数,代码可能是

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 deceases中数据库包装器的所有常见错误。您可能会发现此阅读非常有用。