InitPHP (A PHP Framework) 用户手册
第4章 4.2 DAO数据层使用

详细说明:

API使用:

class testDao extends Dao {
	public function test() {
		$this->dao->cache->set('test', '缓存的值', 0, 'FILE'); //缓存接口使用方法
		$this->dao->db->insert(array('name' => 'cccccccc'), 'test'); //DB接口使用方法
		print_r($this->dao->db->get_all('test'));
	}
}

应用配置:

/**
 * Dao配置参数
 * 1. 你可以配置Dao的路径和文件(类名称)的后缀名
 * 2. 一般情况下您不需要改动此配置
 */
$InitPHP_conf['dao']['dao_postfix']  = 'Dao'; //后缀
$InitPHP_conf['dao']['path']  = 'library/dao/'; //后缀
/**
 * 缓存配置参数
 * 1. 您如果使用缓存 需要配置memcache的服务器和文件缓存的缓存路径
 * 2. memcache可以配置分布式服务器,根据$InitPHP_conf['memcache'][0]的KEY值去进行添加
 * 3. 根据您的实际情况配置
 */
$InitPHP_conf['memcache'][0]   = array('127.0.0.1', '11211');  
$InitPHP_conf['cache']['filepath'] = 'data/filecache';   //文件缓存目录
/**
 * 数据库配置
 * 1. 根据项目的数据库情况配置
 * 2. 支持单数据库服务器,读写分离,随机分布的方式
 * 3. 可以根据$InitPHP_conf['db'][0]['driver'] 选择mysql mysqli(暂时支持这两种)
 * 4. 支持多库配置 $InitPHP_conf['db_multi']['test']
 * 5. 详细见文档
 */
$InitPHP_conf['db']['driver']                	 		   = 'mysqli'; //mysql,mysqli 默认必填
$InitPHP_conf['db']['default']['db_type']				   = 2; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['default'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default'][0]['password']              = '1234562'; //数据库密码
$InitPHP_conf['db']['default'][0]['database']              = 'test'; //数据库
$InitPHP_conf['db']['default'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default'][0]['pconnect']              = 0; //是否持久链接

$InitPHP_conf['db']['default2']['db_type']				   = 1; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['default2'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default2'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default2'][0]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['default2'][0]['database']              = 'test'; //数据库
$InitPHP_conf['db']['default2'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default2'][0]['pconnect']              = 0; //是否持久链接
$InitPHP_conf['db']['default2'][1]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default2'][1]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default2'][1]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['default2'][1]['database']              = 't1'; //数据库
$InitPHP_conf['db']['default2'][1]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default2'][1]['pconnect']              = 0; //是否持久链接 

$InitPHP_conf['db']['test2']['db_type']				  	= 0; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['test2'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['test2'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['test2'][0]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['test2'][0]['database']              = 't1'; //数据库
$InitPHP_conf['db']['test2'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['test2'][0]['pconnect']              = 0; //是否持久链接 

调用Dao类:

/**
 * 【静态】获取Dao-实例并且单例模式获取Dao
 * 1.单例模式获取
 * 2.可以选定Dao路径path
 * 3. dao需要在配置文件中配置参数,$path对应dao目录中的子目录
 * 全局使用方法:InitPHP::getDao($daoname, $path = '') 
 * @param string $daoname 服务名称
 * @param string $path 路径
 * @return object
 */
public static function getDao($daoname, $path = '') {
	global $InitPHP_conf;
	$path  = ($path == '') ? '' : $path . '/';
	$class = $daoname . $InitPHP_conf['dao']['dao_postfix'];
	$file  = rtrim($InitPHP_conf['dao']['path'], '/') . '/' . $path . $class . '.php';
	if (!InitPHP::import($file)) return false;
	$obj = InitPHP::loadclass($class);
	return $obj;
}

新增DB驱动:

分表分库:

/**
 * 按月分表-分库方法
 * 1. 当数据表数据量过大的时候,可以根据按月分表的方法来进行分表
 * 2. 按月分库会根据当前的时间来决定是几月份的数据
 * 3. 按月分库$defaultId,可以自定义填入月份,例如:get_mon_table('test', 2),则返回 test_02
 * Dao中使用方法:$this->dao->db->month_identify($tbl, $defaultId = '')
 * @param string $tbl
 * @param string $defaultId
 */
public function month_identify($tbl, $defaultId = '') {
	if (empty ( $defaultId )) {
		$mon = sprintf ( '%02d', date ( 'm', InitPHP::getTime() ));
		return $tbl . '_' . $mon;
	} else {
		return $tbl . '_' . sprintf ( '%02d', $defaultId );
	}
}

/**
 * 根据数值来确定分表-分库方法
 * 1. 可以自定义分表-分库的模板前缀$tbl变量
 * 2. 可以自定义截取长度
 * 3. 一般可以根据用户UID来获取分表或者分库
 * Dao中使用方法:$this->dao->db->num_identify($num, $tbl, $default = 1)
 * @param int $num     数值
 * @param string $tbl  模板前缀
 * @param int $default 默认截取长度
 */
public function num_identify($num, $tbl, $default = 1) {
	$num = (string) $num;
	$len = strlen($num);
	if ($len >= $default)
		$str = substr($num, $len - $default, $default);
	else
		$str = str_pad($num, $default, '0', STR_PAD_LEFT); 
	return $tbl . '_' . $str;
}

/**
 * 求余数的方式获取分表-分库方法
 * 1. 求余方式余数比较少,适合小型的分表法
 * 2. 可以自定义求余除数
 * Dao中使用方法:$this->dao->db->fmod_identify($num, $tbl, $default = 7)
 * @param int $num
 * @param string $tbl
 * @param int $default
 * @return 
 */
public function fmod_identify($num, $tbl, $default = 7) {
	return $tbl . '_' . fmod($num/$default);
}
 

分布式数据库处理:

/* 单数据库配置文件配置方案,默认为default: */
$InitPHP_conf['db']['driver']                	 		   = 'mysqli'; //mysql,mysqli 默认必填
$InitPHP_conf['db']['default']['db_type']				   = 2; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['default'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default'][0]['password']              = '1234562'; //数据库密码
$InitPHP_conf['db']['default'][0]['database']              = 'test'; //数据库
$InitPHP_conf['db']['default'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default'][0]['pconnect']              = 0; //是否持久链接
/**********************************************************************/

/* 主从数据库配置文件方案 */
$InitPHP_conf['db']['default2']['db_type']				    = 1; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['default2'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default2'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default2'][0]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['default2'][0]['database']              = 'test'; //数据库
$InitPHP_conf['db']['default2'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default2'][0]['pconnect']              = 0; //是否持久链接

$InitPHP_conf['db']['default2'][1]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default2'][1]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default2'][1]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['default2'][1]['database']              = 't1'; //数据库
$InitPHP_conf['db']['default2'][1]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default2'][1]['pconnect']              = 0; //是否持久链接 
/**********************************************************************/

/* 随机分布数据库配置文件方案 mysql-cluster适用 */
$InitPHP_conf['db']['default2']['db_type']				    = 2; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['default2'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default2'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default2'][0]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['default2'][0]['database']              = 'test'; //数据库
$InitPHP_conf['db']['default2'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default2'][0]['pconnect']              = 0; //是否持久链接

$InitPHP_conf['db']['default2'][1]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default2'][1]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default2'][1]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['default2'][1]['database']              = 't1'; //数据库
$InitPHP_conf['db']['default2'][1]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default2'][1]['pconnect']              = 0; //是否持久链接
 

多数据链接:

/* 多库链接数据库配置方案 */
$InitPHP_conf['db']['driver']                	 		   = 'mysqli'; //mysql,mysqli 默认必填
$InitPHP_conf['db']['default']['db_type']				   = 2; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['default'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['default'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['default'][0]['password']              = '1234562'; //数据库密码
$InitPHP_conf['db']['default'][0]['database']              = 'test'; //数据库
$InitPHP_conf['db']['default'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['default'][0]['pconnect']              = 0; //是否持久链接


$InitPHP_conf['db']['test2']['db_type']				  	= 0; //0-单个服务器,1-读写分离,2-随机
$InitPHP_conf['db']['test2'][0]['host']                  = '127.0.0.1'; //主机
$InitPHP_conf['db']['test2'][0]['username']              = 'root'; //数据库用户名
$InitPHP_conf['db']['test2'][0]['password']              = '123456'; //数据库密码
$InitPHP_conf['db']['test2'][0]['database']              = 't1'; //数据库
$InitPHP_conf['db']['test2'][0]['charset']               = 'utf8'; //数据库编码   
$InitPHP_conf['db']['test2'][0]['pconnect']              = 0; //是否持久链接 
/****************************************************************************/

/* DAO使用方法 */
class testaDao extends Dao {
    //多库链接,对应test2的数据库-$InitPHP_conf['db']['test2']
	public function test() {
		$this->init_db('test2')->insert_more(array('username'), array(array('init'),array('woshishen')), 'test');
	}
}