我是PDO的新手,我的问题非常简单。我有一个简单的连接到DB的功能:
function connectDB()
{
try {
$dbh = new PDO('mysql:host='.Config::$db_server.';dbname='.Config::$db_name, Config::$db_login, Config::$db_password, array(
PDO::ATTR_PERSISTENT => true
));
$dbh->exec("SET CHARACTER SET utf8");
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
调用此函数后,我成功连接到db。稍后当尝试使用$ dbh-&gt;查询发送查询时,我得到了“对非对象调用成员函数查询()”。我明白 - 我目前没有班级的实例。但唯一想到的就是再次使用$ dbh = new PDO(“设置”),这有点愚蠢吗?这个功能没有意义。我试图在connectDB函数中返回$ dbh(在NULL语句之前),但它并没有真正起作用。
如何正确完成?
答案 0 :(得分:1)
这取决于你的app的架构,但我相信,你应该让数据库处理一个类变量,在构造函数中初始化它并在以后使用它。
class DatabaseAccess{
private $_db;
public function __construct(){
try {
$this->_db = new PDO('mysql:host='.Config::$db_server.';dbname='.Config::$db_name, Config::$db_login, Config::$db_password, array(
PDO::ATTR_PERSISTENT => true
));
$this->_db->exec("SET CHARACTER SET utf8");
//notice I removed "= null" part
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
public function getSomething(){
//run your query here:
return $this->_db->query('');
}
}
答案 1 :(得分:0)
您需要删除函数中的$dbh = null;
句子。使用此句子,您将使用空值覆盖连接,因此以后执行$dbh->query()
时,就像执行null->query()
一样,因此会出现错误。
此外,您需要保存处理程序,否则在代码退出该函数后它将丢失。在函数末尾添加return $dbh;
或将其包装在类中。