www.gusucode.com > iWebshop开源PHP商城系统 v2.8源码程序 > iwebshop/lib/db/db_class.php

    <?php
/**
 * @copyright (c) 2011 jooyea.cn
 * @file db_class.php
 * @brief 数据库抽象父类
 * @author chendeshan
 * @date 2010-12-3
 * @version 0.6
 */

/**
* @class IDB
* @brief 数据库底层抽象类
*/
abstract class IDB
{
	//数据库写操作连接资源
	private static $wTarget = NULL;

	//数据库读操作连接资源
	private static $rTarget = NULL;

	//SQL类型
	protected static $sqlType = NULL;

	/**
	* @brief 获取SQL语句的类型,类型:select,update,insert,delete
	* @param string $sql 执行的SQL语句
	* @return string SQL类型
	*/
	private function getSqlType($sql)
	{
		$strArray = explode(' ',trim($sql),2);
		return strtolower($strArray[0]);
	}

	/**
	 * @brief 设置数据库读写分离并且执行SQL语句
	 * @param string $sql 要执行的SQL语句
	 * @return int or bool SQL语句执行的结果
	 */
    public function query($sql)
    {
		//取得SQL类型
        self::$sqlType = $this->getSqlType($sql);

		//读方式
        if(self::$sqlType=='select' || self::$sqlType=='show')
        {
            if(self::$rTarget == NULL)
            {
				//多数据库支持并且读写分离
                if(isset(IWeb::$app->config['DB']['read']))
                {
					//获取ip地址
					$ip = IClient::getIP();

                    $this->connect(IHash::hash(IWeb::$app->config['DB']['read'],$ip));
                }
                else
                {
                	$this->connect(IWeb::$app->config['DB']);
                }
                self::$rTarget = $this->linkRes;
            }
        }
        //写方式
        else
        {
            if(self::$wTarget == NULL)
            {
				//多数据库支持并且读写分离
                if(isset(IWeb::$app->config['DB']['write']))
                {
                	$this->connect(IWeb::$app->config['DB']['write']);
                }
                else
                {
                	$this->connect(IWeb::$app->config['DB']);
                }
                self::$wTarget = $this->linkRes;
            }
        }

        if($this->linkRes)
        {
        	return $this->doSql($sql);
        }
        else
        {
        	return false;
        }

    }

	//数据库连接
    abstract public function connect($dbinfo);

	//执行sql通用接口
    abstract public function doSql($sql);
}
?>