简体   繁体   English

使用MVC类进行两次PDO连接

[英]PDO connection twice with MVC class

I'm new in MVC, I try to put PDO into my model 我是MVC的新手,我尝试将PDO放入模型中

I extends PDO in my Model & page model extends from Model 我伸出PDO在我的模型页面模型 ,从模型扩展

PDO->Model->Page Model PDO->模型->页面模型

my problem is because page model extends Model, so it will construct connect db again. 我的问题是因为页面模型扩展了Model,所以它将再次构造connect db。 (Model has to construct connect db, because it extends from PDO) (模型必须构造connect db,因为它是从PDO扩展的)

anyone know how to fix this? 有人知道怎么修这个东西吗?

class Model extends PDO{

    protected   $dsn        = "mysql:host=127.0.0.1; dbname=abc; charset=utf8;",
                $username   = "member", 
                $password   = "123",
                $options    = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');

    public function __construct(){
        //connect db
        parent::__construct($this->dsn, $this->username, $this->password, $this->options);
        echo "db connect";
    }
}

class index_model extends Model{

    public function __construct(){
        parent::__construct();
        //if i don't add this, will get error,
        //but if i add, I will connect db twice   
    }

    public function mainData(){
        $sql = parent::prepare("SELECT pday FROM pday");    
        $sql->execute();
        $data = $sql->fetch(PDO::FETCH_ASSOC);
        echo $data['pday'];
    }
}

I have fix my problem, I create another class for connection, 我已经解决了问题,创建了另一个连接类,

and put this inside of Model method, page model extends model, so it will not construct connection twice. 并将其放入Model方法内部,页面模型扩展了模型,因此不会构造两次连接。

class Model{
   protected $db;

   public function connect(){
            $this->db = new DB;
   }
}

class DB extends PDO{
    protected   $dsn        = "mysql:host=127.0.0.1; dbname=abc; charset=utf8;",
                $username   = "member", 
                $password   = "123",
                $options    = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');

    public function __construct(){
          parent::__construct($this->dsn, $this->username, $this->password, $this->options);
    }
}

class index_model extends Model{
    private $sql;

    public function mainData(){
        $this->sql = $this->db->prepare("...");
        ...
    }
}

$index = new index_model;
$index->connect();
$index->mainData();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM