Maison >php教程 >PHP源码 >MST Library 3.1 数据库连接工厂DBC

MST Library 3.1 数据库连接工厂DBC

PHP中文网
PHP中文网original
2016-05-25 17:14:221326parcourir

MST Library 3.1 数据库连接工厂DBC

<?php

/**
 * DataBase Common Connector
 * 数据库共用连接器,连接驱动以如下的方式存放:
 * DBC/PdoOci.php
 * DBC/PdoMySQL.php
 * DBC/MySQLi.php
 * 连接驱动必须实现MST_IDBC接口
 *
 * 调用一个数据库的连接实例如下:
 * 
 * MST_DBC::connect($remote);
 * # $remote对应config中配置
 * 
 *
 * @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		= &#39;default&#39;,
		PDO_MYSQL	= &#39;mysql&#39;,
		PDO_OCI		= &#39;oracle&#39;,
		OCI8		= &#39;oci8&#39;,
		CLOB		= &#39;CLOB&#39;,
		BLOB		= &#39;BLOB&#39;,
		CREATE		= &#39;create&#39;,
		UPDATE		= &#39;update&#39;,
		DELETE		= &#39;delete&#39;,
		FETCH_ASSOC	= 2,
		FETCH_NUM	= 3,
		FETCH_BOTH	= 4;

	private static
		$_dbConfigKey = &#39;database&#39;,
		$_dbConfig = array(),
		$_adapters = array(
			self::PDO_MYSQL		=> &#39;PdoMySQL&#39;,
			self::PDO_OCI		=> &#39;PdoOci&#39;,
			self::OCI8			=> &#39;Oci8&#39;,
		),
		$_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[&#39;adapter&#39;])
			 || !isset(self::$_adapters[$config[&#39;adapter&#39;]]))
				MST_Core::error(302, $remote);
			$adapter = self::$_adapters[$config[&#39;adapter&#39;]];
			$adapterClass = __CLASS__ . &#39;_&#39; . $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();
	}

}

                       

           

2.配置文件举例

 array(
	),
	MST_Core::IN_DEV => array(
		&#39;database&#39; => array(
			MST_DBC::LOCAL => array(
				&#39;adapter&#39;	=> MST_DBC::PDO_MYSQL,
				&#39;host&#39;		=> &#39;127.0.0.1&#39;,	// 数据库连接ip
				&#39;user&#39;		=> &#39;root&#39;,		// 数据库账号
				&#39;password&#39;	=> &#39;&#39;,	// 数据库密码
				&#39;dbname&#39;	=> &#39;any_db&#39;,
				&#39;prefix&#39;	=> &#39;pf&#39;,
			),
			&#39;iphone&#39; => array(
				&#39;adapter&#39;	=> MST_DBC::PDO_MYSQL,
				&#39;host&#39;		=> &#39;127.0.0.1&#39;,	// 数据库连接ip
				&#39;user&#39;		=> &#39;root&#39;,		// 数据库账号
				&#39;password&#39;	=> &#39;&#39;,	// 数据库密码
				&#39;dbname&#39;	=> &#39;any_db_iphone&#39;,
				&#39;prefix&#39;	=> false,
			),
		),
		MST_Mailer::FLAG => array(
			MST_Mailer::LOCAL => array(
				&#39;host&#39;		=> &#39;localhost&#39;,
				&#39;port&#39;		=> 25,
				&#39;debug&#39;		=> 0,
				&#39;charset&#39;	=> PROJECT_ENCODE,
				&#39;language&#39;	=> PROJECT_LANG,
				MST_Mailer::IS_SMTP 	=> true,
				MST_Mailer::SMTP_AUTH	=> false,
				MST_Mailer::FROM_MAIL	=> &#39;any@host.com&#39;,
				MST_Mailer::FROM_NAME	=> &#39;anyone&#39;,
			)
		),
	),
	MST_Core::IN_TEST => array(
		&#39;database&#39; => array(
			MST_DBC::LOCAL => array(
				&#39;adapter&#39;	=> MST_DBC::PDO_MYSQL,
				&#39;host&#39;		=> &#39;127.0.0.1&#39;,	// 数据库连接ip
				&#39;user&#39;		=> &#39;root&#39;,		// 数据库账号
				&#39;password&#39;	=> &#39;&#39;,	// 数据库密码
				&#39;dbname&#39;	=> &#39;any_db&#39;,
				&#39;prefix&#39;	=> &#39;pf&#39;,
			),
			&#39;iphone&#39; => array(
				&#39;adapter&#39;	=> MST_DBC::PDO_MYSQL,
				&#39;host&#39;		=> &#39;127.0.0.1&#39;,	// 数据库连接ip
				&#39;user&#39;		=> &#39;root&#39;,		// 数据库账号
				&#39;password&#39;	=> &#39;&#39;,	// 数据库密码
				&#39;dbname&#39;	=> &#39;any_db_iphone&#39;,
				&#39;prefix&#39;	=> false,
			),
		),
		MST_Mailer::FLAG => array(
			MST_Mailer::LOCAL => array(
				&#39;host&#39;		=> &#39;localhost&#39;,
				&#39;port&#39;		=> 25,
				&#39;debug&#39;		=> 0,
				&#39;charset&#39;	=> PROJECT_ENCODE,
				&#39;language&#39;	=> PROJECT_LANG,
				MST_Mailer::IS_SMTP 	=> true,
				MST_Mailer::SMTP_AUTH	=> false,
				MST_Mailer::FROM_MAIL	=> &#39;any@host.com&#39;,
				MST_Mailer::FROM_NAME	=> &#39;anyone&#39;,
			)
		),
	),
	MST_Core::IN_PRO => array(
		&#39;database&#39; => array(
			MST_DBC::LOCAL => array(
				&#39;adapter&#39;	=> MST_DBC::PDO_MYSQL,
				&#39;host&#39;		=> &#39;127.0.0.1&#39;,	// 数据库连接ip
				&#39;user&#39;		=> &#39;root&#39;,		// 数据库账号
				&#39;password&#39;	=> &#39;&#39;,	// 数据库密码
				&#39;dbname&#39;	=> &#39;any_db&#39;,
				&#39;prefix&#39;	=> &#39;pf&#39;,
			),
			&#39;iphone&#39; => array(
				&#39;adapter&#39;	=> MST_DBC::PDO_MYSQL,
				&#39;host&#39;		=> &#39;127.0.0.1&#39;,	// 数据库连接ip
				&#39;user&#39;		=> &#39;root&#39;,		// 数据库账号
				&#39;password&#39;	=> &#39;&#39;,	// 数据库密码
				&#39;dbname&#39;	=> &#39;any_db_iphone&#39;,
				&#39;prefix&#39;	=> false,
			),
		),
		MST_Mailer::FLAG => array(
			MST_Mailer::LOCAL => array(
				&#39;host&#39;		=> &#39;localhost&#39;,
				&#39;port&#39;		=> 25,
				&#39;debug&#39;		=> 0,
				&#39;charset&#39;	=> PROJECT_ENCODE,
				&#39;language&#39;	=> PROJECT_LANG,
				MST_Mailer::IS_SMTP 	=> true,
				MST_Mailer::SMTP_AUTH	=> false,
				MST_Mailer::FROM_MAIL	=> &#39;any@host.com&#39;,
				MST_Mailer::FROM_NAME	=> &#39;anyone&#39;,
			)
		),
	),
);

           

       

 以上就是MST Library 3.1 数据库连接工厂DBC的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:php输出当前日期和星期Article suivant:数组值拼接成字符串