如何为PDO数据库连接构建和调用一个简单的PHP类

时间:2015-02-17 18:42:53

标签: php class pdo

这是我到目前为止所拥有的:

class DB {
    var $DBUser = 'xxx';
    var $DBPass = 'xxx';
    var $DBServer = 'xxx';
    var $DBName = 'xxx';

    public function connect() {
        try {  
            $strDSN = "mysql:host=$this->DBServer;dbname=$this->DBName;";  
            $username = $this->$DBUser;
            $pass = $this->$DBPass;
            $conn = new PDO($strDSN, $username, $pass);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo 'connected';
         }   
        catch (PDOException $e) {  
            echo 'Error: ' . $e->getMessage();   
        }  
    } //end method
} //end class

然后使用它来调用:

$db = new DB; 
$conn = $db->connect; 
$stmt = $conn->prepare('SELECT * FROM XXX WHERE id = :id'); 
$id = $_GET['id'];
$stmt->execute(array('id'=>$id)); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

但是,我收到此错误消息:

  

致命错误:在非对象

上调用成员函数prepare()

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:2)

调用方法时,请加上括号:

$conn = $db->connect();
//                  ^^ missing

第二个问题是你的connect方法没有返回连接句柄。在try块中添加:

return $conn;

最后,在引用实例和类属性时,请不要包含$

$username = $this->DBUser;
//                 ^ $ should not be present