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

    <?php
/**
 * @copyright (c) 2014 aircheng.com
 * @file mysqli_class.php
 * @brief mysqli数据库应用
 * @author nswe
 * @date 2014/8/20 20:47:07
 * @version 2.6
 */

/**
 * @class IMysqli
 * @brief MYSQLI数据库应用
 */
class IMysqli extends IDB
{
	//数据库连接资源
	public $linkRes = false;

	/**
	 * @brief 数据库连接
	 * @param array $dbinfo 数据库的连接配制信息 [0]ip地址 [1]用户名 [2]密码 [3]数据库
	 * @return bool or resource 值: false:链接失败; resource类型:链接的资源句柄;
	 */
	public function connect($dbinfo)
	{
		if($this->linkRes)
		{
			return $this->linkRes;
		}

		$hostArray = explode(':',$dbinfo['host']);
		$hostPort  = isset($hostArray[1]) ? $hostArray[1] : ini_get("mysqli.default_port");

	  	$this->linkRes = new mysqli($hostArray[0],$dbinfo['user'],$dbinfo['passwd'],$dbinfo['name'],$hostPort);

		if($this->linkRes->connect_errno)
		{
			throw new IException($this->linkRes->connect_error);
		}

	  	if($this->linkRes)
	  	{
		  	$DBCharset = isset(IWeb::$app->config['DB']['charset']) ? IWeb::$app->config['DB']['charset'] : 'utf8';

		  	$this->linkRes->set_charset($DBCharset);
		  	$this->linkRes->query("SET SESSION sql_mode = '' ");
		  	return $this->linkRes;
	  	}
	  	else
	  	{
	  		return false;
	  	}
	}

	/**
	* @brief MYSQL的SQL执行的系统入口
	* @param string $sql 要执行的SQL语句
	* @return mixed
	*/
	public function doSql($sql)
	{
		//读操作
		$readyConf = array('select','show','describe');
		if(in_array(self::$sqlType,$readyConf))
		{
			return $this->read($sql,MYSQLI_ASSOC);
		}

		//写操作
		else
		{
			return $this->write($sql);
		}
	}

	/**
	* @brief 获取数据库内容
	* @param $sql SQL语句
	* @param $type 返回数据的键类型
	* @return array 查询结果集
	*/
	private function read($sql,$type = MYSQLI_ASSOC)
	{
		$result   = array();
		$resource = $this->linkRes->query($sql);

		if($resource)
		{
			while($data = $resource->fetch_array($type))
			{
				$result[] = $data;
			}
			$resource->free();
			return $result;
		}
		else
		{
			throw new IException("{$sql}\n -- ".$this->linkRes->error);
		}
	}

	/**
	* @brief 写入操作
	* @param string $sql SQL语句
	* @return int or bool 失败:false; 成功:影响的结果数量;
	*/
	private function write($sql)
	{
		$result = $this->linkRes->query($sql);

		if($result==true)
		{
			switch(self::$sqlType)
			{
				case "insert":
				{
					return $this->linkRes->insert_id;
				}
				break;

				default:
				{
					return $this->linkRes->affected_rows;
				}
			}
		}
		else
		{
			throw new IException("{$sql}\n -- ".$this->linkRes->error);
			return false;
		}
	}
}