0

CI 2.1.3 が PDO をサポートするようになったことは知っています。しかし、codeigniter関数の代わりにpdo関数を使用する方が快適です.PDOを拡張してライブラリとして使用し、コントローラーまたは別のライブラリによってロードされたらPDOオブジェクトを作成したいと思います; 可能ですよね?、これまでの私の試み:

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();
       }
    }
}

常に戻ります:

致命的なエラー:の非オブジェクトでメンバー関数 prepare() を呼び出しています...

私は PHP クラス/オブジェクトの専門家ではないので、コードを改善して機能させるために助けが必要です。ありがとう。

4

1 に答える 1

0

CodeIgniterライブラリのドキュメントによると:

  • ファイル名は大文字にする必要があります。例: Myclass.php クラス

  • 宣言は大文字にする必要があります。例: クラス Myclass

  • クラス名とファイル名は一致する必要があります。

Mypdo クラスが application/library/Mypdo.php であることを確認してください。

于 2013-04-09T03:50:41.450 に答える