使用PDO对象 - MySQL

时间:2011-02-27 10:13:30

标签: mysql pdo

我是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语句之前),但它并没有真正起作用。

如何正确完成?

2 个答案:

答案 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;或将其包装在类中。