PHP MVC PDO多个数据库

时间:2013-09-21 18:32:23

标签: php pdo

我正在学习PHP中的MVC并使用PDO进行数据库访问。

我的数据库类如下(我在数据库变量的配置文件中使用DEFINE):

class Database extends PDO {

    public function __construct($dbconn ="mysql") {

        $options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING);

        switch($dbconn) {
            case 'usados':
                parent::__construct(DB_TYPE_USADOS . ':host=' . DB_HOST_USADOS . ';dbname=' . DB_NAME_USADOS, DB_USER_USADOS, DB_PASS_USADOS, $options);
                break;

            case 'autos':
                parent::__construct(DB_TYPE_AUTOS . ':host=' . DB_HOST_AUTOS . ';dbname=' . DB_NAME_AUTOS, DB_USER_AUTOS, DB_PASS_AUTOS, $options);
                break;

            case 'servicos':
                parent::__construct(DB_TYPE_SERVICOS . ':host=' . DB_HOST_SERVICOS . ';dbname=' . DB_NAME_SERVICOS, DB_USER_SERVICOS, DB_PASS_SERVICOS, $options);
                break;

            default:
                parent::__construct(DB_TYPE_MYSQL . ':host=' . DB_HOST_MYSQL . ';dbname=' . DB_NAME_MYSQL, DB_USER_MYSQL, DB_PASS_MYSQL, $options);
                break;
        }
    }
}

在示例模型中,我有:

class Note_Model extends Model {

    public $errors = array();

    public function __construct() {
        parent::__construct($dbconn="mysql");
    }

    public function getAllNotes() {
        $sth = $this->db->prepare("SELECT user_id, note_id, note_text
                                    FROM note
                                    WHERE user_id = :user_id ;");
        $sth->execute(array(':user_id' => $_SESSION['user_id']));    

        return $sth->fetchAll();
    }
}

我有两个问题:

  1. 在我的数据库类中,我的方法是针对不同的数据库连接(由不同的模型使用)吗?交换机结构是否适用于这种情况以及一个带有连接位置的变量?

  2. 我可以连接到不同模型的不同数据库,但如果我有需要,如何从同一模型中的不同数据库获取数据。例如,在显示来自不同来源的信息的仪表板中。它不只是$ this-> db,是吗?

  3. 先谢谢你。

1 个答案:

答案 0 :(得分:1)

构造函数中的switch语句是一个代码气味,表明类正在做太多。我将创建4个类(扩展PDO或您自己的基类)并改为使用它们。

关于模型,我不是MVC的专家,但我知道你可以在不同的数据库中连接表,只要它们在同一台服务器上。但是,这可能会导致“老板”类打破每个数据库的一个数据库规则。最好的方法可能是让另一个类询问数据所需的任何模型,然后将它们组合在一起。