我必须在Database类中创建getConnection函数。该函数应使用PDO对象连接到数据库并返回它。 我有这样的事情:
class Database {
public function getConnection() {
$result = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
return $result;
}
}
这是对的吗?我怎么知道我是否连接到数据库?
答案 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中数据库包装器的所有常见错误。您可能会发现此阅读非常有用。