【问题标题】:extending PDO as CodeIgniter library将 PDO 扩展为 CodeIgniter 库
【发布时间】:2013-04-09 02:55:34
【问题描述】:

我知道 CI 2.1.3 现在支持 PDO。但是使用 pdo 函数而不是 codeigniter 函数对我来说会更舒服,现在我想扩展 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 类/对象方面的专家,所以我需要帮助来改进我的代码并使其正常工作。谢谢。

【问题讨论】:

  • 我认为它有活动记录
  • @ArunKillu 我不明白,活动记录有什么关系?我该怎么办?
  • 为什么在框架本身提供pdo的情况下又要实现pdo。ellislab.com/codeigniter/user-guide/database/configuration.html
  • @ArunKillu 我只是觉得使用 PDO 功能比使用 CI 的功能更舒服。
  • 你的 Mypdo 文件在哪里,它的名字是什么?

标签: php codeigniter pdo


【解决方案1】:

根据 CodeIgniter Libraries documentation

  • 文件名必须大写。例如:Myclass.php 类

  • 声明必须大写。例如:类 Myclass

  • 类名和文件名必须匹配。

确保您的 Mypdo 类是 application/library/Mypdo.php。

【讨论】:

  • 谢谢,我的类加载正确,我通过更改连接密码来测试它,然后它返回 PDO 错误;但我的问题实际上是将该连接传递给另一个类函数;
  • 如果该库被加载到 CI 实例中,那么您应该能够在任何地方访问它。现在有什么症状?
猜你喜欢
  • 2011-12-10
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多