2014-02-21 82 views
0

我有一個數據庫包裝器和一個獲取PDO連接實例的靜態方法。但是,當我想進行PDO查詢時,我無法訪問它。PDO無法訪問數據庫連接實例

這裏是DB類的一部分:

class DB { 
private static $_instance = null; 
private $_pdo, 
     $_query, 
     $_error = false, 
     $_results, 
     $_count =0; 


private function __construct() { 
    try { 
     $this->_pdo = new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password')); 

    } catch (PDOException $e) { 
     die($e->getMessage()); 

    } 
} 

public static function getInstance() { 
    if(!isset(self::$_instance)) { 
     self::$_instance = new DB(); 

    } 
    return self::$_instance; 
} 

在這裏,我的查詢:

$pdo = DB::getInstance(); 

    $statement = $pdo->prepare("select surname from staff_info where fname = :name"); 
    $statement->execute(array(':name' => Input::get('name'))); 
    $total = $statement->rowCount(); 

    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { 
      echo $row['surname'].'</br>'; 

    } 

但是當我運行的查詢我收到此錯誤:

Fatal error: Call to undefined method DB::prepare()

我在做什麼錯了嗎?任何幫助?

但是這作品時,我做這樣

$dsn = 'mysql:host=localhost;dbname=cois'; 
$user = 'root'; 
$password = ''; 
$pdo = new PDO($dsn, $user, $password); 


$filmName = "omar"; 

$statement = $pdo->prepare("select surname from staff_info where fname = :name"); 
$statement->execute(array(':name' => $filmName)); 
$total = $statement->rowCount(); 

while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { 
     echo $row['surname'].'</br>'; 

} 

這怎麼可能?

+0

哪裏是'上prepare'方法你的數據庫類? –

+1

@chumkiu可能不在。因爲這是錯誤所說的。 –

+0

你在$ this-> db變量上分配了pdo對象,並返回了$ _instance靜態變量作爲db對象,顯然你的$ _instance是空的 – Surace

回答

5

你打電話的對象DB不是在PDO準備,我建議添加getter類DB:

public function getPDO(){ 
    return $this->_pdo; 
} 

和修改準備查詢:

$db = DB::getInstance(); 
$statement = $db->getPDO()->prepare(...); 
+0

+1很好的解釋。 – Hackerman

+0

非常感謝。它現在可以工作 – internally1

0
private function __construct() { 
    try { 
     self::$_instance = new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password')); 

    } catch (PDOException $e) { 
     die($e->getMessage()); 

    } 
} 
public static function getInstance() { 
    if(!isset(self::$_instance)) { 
     new DB(); 

    } 
    return self::$_instance; 
} 
+0

你在$ this-> db變量上分配了pdo對象並且返回了$ _instance靜態變量作爲db對象,顯然你的$ _instance是空的 – Surace