龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

PHP MST Library 3.1 数据库连接工厂DBC

时间:2015-04-01 15:58来源:网络整理 作者:网络 点击:
分享到:
MST Library 3.1 数据库连接工厂DBC 就是数据库连接工厂了,多的就不多说了**DBC类与接口**[代码片段(188行)]**配置文件举例**[代码片段(105行)]

就是数据库连接工厂了,多的就不多说了

DBC类与接口

<?php

/**
 * DataBase Common Connector
 * 数据库共用连接器,连接驱动以如下的方式存放:
 * DBC/PdoOci.php
 * DBC/PdoMySQL.php
 * DBC/MySQLi.php
 * 连接驱动必须实现MST_IDBC接口
 *
 * 调用一个数据库的连接实例如下:
 * <code>
 * MST_DBC::connect($remote);
 * # $remote对应config中配置
 * </code>
 *
 * @author Janpoem
 */

interface MST_IDBC {

    public function connect(& $config);

    public function disconnect();

    public function getStatement();

    public function getConnector();

    public function getFecthMode($mode = MST_DBC::FETCH_ASSOC);

    public function lastSql(& $index = 0);

    public function lastInsertId($table, $column);

    public function & query($sql, $params = null);

    public function execute($sql, $params = null);

    public function select($conditions, $params = null);

    public function insert($table, array $data);

    public function update($table, array $target, array $data);

    public function updateAll($table, array $data);

    public function delete($table, array $target);

    public function deleteAll($table);

    public function truncate($table);

    public function showTables();

    public function getDtFormat();

    public function startTransaction();

    public function commit();

    public function rollBack();

    public function takeOverDisconnect();

    public function fetch($style = MST_DBC::FETCH_ASSOC);

    public function fetchAll($style = MST_DBC::FETCH_ASSOC);

    public function quote($val);

    public function isAutoCommit();
}

abstract class MST_DBC {

    const
        LOCAL       = 'default',
        PDO_MYSQL   = 'mysql',
        PDO_OCI     = 'oracle',
        OCI8        = 'oci8',
        CLOB        = 'CLOB',
        BLOB        = 'BLOB',
        CREATE      = 'create',
        UPDATE      = 'update',
        DELETE      = 'delete',
        FETCH_ASSOC = 2,
        FETCH_NUM   = 3,
        FETCH_BOTH  = 4;

    private static
        $_dbConfigKey = 'database',
        $_dbConfig = array(),
        $_adapters = array(
            self::PDO_MYSQL     => 'PdoMySQL',
            self::PDO_OCI       => 'PdoOci',
            self::OCI8          => 'Oci8',
        ),
        $_importAdapters = array(),
        $_register = array();

    protected static
        $_querySql = array(),
        $_lastHash = null;

    final static public function & connect($remote = null) {
        if ($remote == null) $remote = self::LOCAL;
        if (!isset(self::$_register[$remote])) {
            $config = MST_Core::getConfig(self::$_dbConfigKey, $remote);
            if (empty($config))
                MST_Core::error(301, $remote);
            if (empty($config['adapter'])
             || !isset(self::$_adapters[$config['adapter']]))
                MST_Core::error(302, $remote);
            $adapter = self::$_adapters[$config['adapter']];
            $adapterClass = __CLASS__ . '_' . $adapter;
            if (!isset(self::$_importAdapters[$adapter])) {
                if (!MST_Core::import("MST/DBC/{$adapter}", MST_Core::P_LIB)
                 || !class_exists($adapterClass))
                    MST_Core::error(302, "MST/DBC/$adapter");
                self::$_importAdapters[$adapter] = 1;
            }
            self::$_register[$remote] = new $adapterClass($config);
        }
        return self::$_register[$remote];
    }

    final static public function disconnect($remote = null) {
        if ($remote == null) {
            foreach (self::$_register as $conn) {
                if (!empty($conn)) $conn->disconnect();
            }
        }
        else {
            self::connect($remote)->disconnect();
        }
    }

    final static public function getConfig($key, $remote = self::LOCAL) {
        if (empty(self::$_dbConfig[$remote]))
            self::$_dbConfig[$remote] = MST_Core::getConfig(self::$_dbConfigKey, $remote);
        if (!empty(self::$_dbConfig[$remote][$key]))
            return self::$_dbConfig[$remote][$key];
        return null;
    }

    final static public function addAdapter($key, $val) {
        if (!isset(self::$_adapters[$key]))
            self::$_adapters[$key] = $val;
    }

    final static public function getLastSqlHash() {
        return self::$_lastHash;
    }

    /**
     * 启动数据库事务
     * @param string $remote 连接实例
     */
    final static public function startTransaction($remote = self::LOCAL) {
        return self::connect($remote)->startTransaction();
    }

    /**
     * 数据库事务提交
     * @param string $remote 连接实例
     */
    final static public function commit($remote = self::LOCAL) {
        return self::connect($remote)->commit();
    }

    /**
     * 数据库事务回滚
     * @param string $remote 连接实例
     */
    final static public function rollBack($remote = self::LOCAL) {
        return self::connect($remote)->rollBack();
    }

    /**
     * 接管某个连接实例的
     * @param unknown_type $remote
     */
    final static public function handleDisconnect($remote = self::LOCAL) {
        return self::connect($remote)->takeOverDisconnect();
    }

}
精彩图集

赞助商链接