2013-04-09 119 views
0

我知道CI 2.1.3現在支持PDO。但是使用pdo函數而不是codeigniter函數會更舒適,現在我想擴展PDO並將其用作庫,並在Controller或其他庫加載後創建PDO對象;這是可能的,不是嗎?,我試圖至今:將PDO擴展爲CodeIgniter庫

class Mypdo extends PDO { 
    public function __construct($dsn='mysql:dbname=mydbname;host=localhost', 
           $username='myusername', 
           $password='mypassword', 
           $driver_options=array()) { 
     parent::__construct($dsn, $username, $password, $driver_options); 
    } 
} 

和簡單的用法:

class Otherlibrary{ 
    var $CI; 
    var $something_id; 

    public function __construct(){ 
     $this->CI =& get_instance(); 
     $this->CI->load->library('mypdo'); 

     $this->something_id = 'foo'; 
    } 

    public function is_something_exist(){ 
     try{ 
     $q = "SELECT * FROM something WHERE something_id = '$this->something_id'"; 
     $stmt = $this->CI->mypdo->prepare($q); //<--PROBLEM 
     $stmt->execute(); 

     if ($stmt->rowCount() < 1){ 
      return false; 
      } else { 
      return true; 
      } 
     } catch (PDOException $e){ 
      echo $e->getMessage(); 
     } 
    } 
} 

總是返回:

Fatal error: Call to a member function prepare() on a non-object in...

我不是專家,在所有在PHP類/對象中,所以請我幫助改進我的代碼並使其工作。謝謝。

+0

我認爲它有活動記錄 – 2013-04-09 03:13:01

+0

@ArunKillu我不明白,活動記錄如何重要?我該怎麼辦? – egig 2013-04-09 03:16:14

+0

爲什麼你想在框架本身提供一個實現pdo的時候再次實現pdo://ellislab.com/codeigniter/user-guide/database/configuration.html – 2013-04-09 03:23:07

回答

0

按照笨Libraries documentation

  • 文件名必須大寫。例如:Myclass.php類

  • 聲明必須大寫。例如:class Myclass

  • 類名和文件名必須匹配。

請確保您的Mypdo類是application/library/Mypdo.php。

+0

謝謝,我的類正確加載,我測試它通過更改我的連接密碼,然後它返回PDO錯誤;但我的問題實際上是將該連接傳遞給另一個類函數; – egig 2013-04-09 03:56:04

+0

如果該庫正在加載到配置項的實例中,那麼您應該可以在任何地方訪問它。現在有什麼症狀? – 2013-04-09 04:05:46