CanPHP开发手册--数据库操作

说明:
  • CP数据库操作类,仅是封装了常用的单表操作,如果复杂的sql语句,请用原生的sql语句
  • 目前仅支持mysql,如需扩展其他数据库,请自行写数据库驱动
模板配置
说明:在config.php文件中配置
代码如下:
//数据库配置
$config['DB_TYPE']='mysql';//数据库类型,一般不需要修改
$config['DB_HOST']='localhost';//数据库主机,一般不需要修改
$config['DB_USER']='root';//数据库用户名
$config['DB_PWD']='123456';//数据库密码
$config['DB_PORT']=3306;//数据库端口,mysql默认是3306,一般不需要修改
$config['DB_NAME']='cp';//数据库名
$config['DB_CHARSET']='utf8';//数据库编码,一般不需要修改
$config['DB_PREFIX']='';//数据库前缀
$config['DB_PCONNECT']=false;//true表示使用永久连接,false表示不适用永久连接,一般不使用永久连接
 
$config['DB_CACHE_ON']=false;//是否开启数据库缓存,true开启,false不开启
$config['DB_CACHE_PATH']='./data/db_cache/';//数据库查询内容缓存目录,地址相对于入口文件,一般不需要修改
$config['DB_CACHE_TIME']=0;//缓存时间,0不缓存,-1永久缓存
$config['DB_CACHE_CHECK']=false;//是否对缓存进行校验,一般不需要修改
$config['DB_CACHE_FILE']='cachedata';//缓存的数据文件名
$config['DB_CACHE_SIZE']='15M';//预设的缓存大小,最小为10M,最大为1G
$config['DB_CACHE_FLOCK']=true;//是否存在文件锁,设置为false,将模拟文件锁,一般不需要修改
//数据库配置结束

	
实例化模板引擎类
说明:在公共模块commodMod.class.php的构造函数中实例化
参考代码如下:
	model;//数据库模型对象
	public $tpl;//模板对象
	public $config;//全局配置
	static $global;//静态变量,用来实现单例模式
	public function __construct()
	{	
		session_start();//开启session

		//参数配置			
		if(!isset(self::$global['config']))
		{
			global $config;
			self::$global['config']=$config;			
		}
		$this->config=self::$global['config'];//配置
		//数据库模型初始化
		if(!isset(self::$global['model']))
		{
			//require(CP_PATH.'core/cpModel.class.php');//加载数据库模型类
			self::$global['model']=new cpModel($this->config);//实例化数据库模型类				
		}
		$this->model=self::$global['model'];//数据库模型对象
		//模板初始化
		if(!isset(self::$global['tpl']))
		{	
		  //  require(CP_PATH.'core/cpTemplate.class.php');//加载模板类
		    self::$global['tpl']=new cpTemplate($this->config);//实例化模板类		
		}
		$this->tpl=self::$global['tpl'];//模板类对象
	}
	//模板变量解析
	protected function assign($name, $value)
	{
		return $this->tpl->assign($name, $value);
	}
	//模板输出
	protected  function display($tpl='')
	{	
		return $this->tpl->display($tpl);	
	}
	?>
	
插入数据
使用方法:
	/*
	$data为数据数组如
     $data['name']='admin';
	$data['email']='404352772@q.com';
	 插入成功返回插入数据的id,否则返回false
	*/
	$this->model->table('表名')->data($data)->insert();

	
更新数据
使用方法:
	/*
	$data为数据数组 如
	$data['name']='admin';
	$data['email']='404352772@q.com';
	$condition为查询条件,可为数组或字符串,$condition['id']=1;
	更新成功返回影响的数据行数,否则返回false
	*/
	$this->model->table('表名')->data($data)->where($condition)->update();
	
数据库查询
使用方法:
	1、查询一条数据:
	$info=$this->model->table('表名')->where($condition)->find();
	成功返回一维数组,否则返回false
	
	限制字段
	$info=$this->model->table('表名')->field('id,title')->where($condition)->find();
	
	排序
	$info=$this->model->table('表名')->field('id,title')->where($condition)->order('id desc')->find();	
	注意:order('id desc')逆序order('id asc')升序
	
	缓存
	$info=$this->model->table('表名')->cache(10)->where($condition)->find();
	cache($time) $time>0,数据缓存时间,$time=0,不缓存,$time=-1永久缓存
	
2、查询多条数据
	$list=$this->model->table('表名')->where($condition)->select();
	成功返回二维数组,否则返回false
	限制字段
	$list=$this->model->table('表名')->field('id,title')->where($condition)->select();
	
	排序
	$list=$this->model->table('表名')->field('id,title')->where($condition)->order('id desc')->select();
	
	限制条数
	$list=$this->model->table('表名')->field('id,title')->where($condition)->order('id desc')->limit(10)->select();
	
	缓存
	$list=$this->model->table('表名')->cache($time)->field('id,title')->where($condition)->order('id desc')->limit(10)->select();
	cache($time) $time>0,数据缓存时间,$time=0,不缓存,$time=-1永久缓存
	
3、查询数据条数
	$count=$this->model->table('表名')->where($condition)->count();
	成功返回一个整数,否则返回false
	
	$count=$this->model->table('表名')->cache($time)->where($condition)->count();
/*
注意:field(),limit(),order(),cache(),table(),where()没有先后顺序之分
$condition条件可为字符串或数组,如果是数组,数组下标表示数据库字段名 多个元素用and连接,
复杂一点的sql,可以写成原生的sql查询条件
$config['DB_CACHE_ON']=true;等于true时,数据库缓存才生效
*/
	
删除数据
使用方法:
	/*
	$condition为查询条件,可为数组或字符串,$condition['id']=1;
	删除成功返回影响的数据行数,否则返回false
	注意,当$condition为空时,不会删除数据。防止不小心把整个表的数据给删除了
	*/
	$this->model->table('表名')->where($condition)->delete();
	
执行原生sql代码
使用方法:
	/*
	如果$sql为查询条件,则返回二维数组,且可以设置缓存$this->model->cache(缓存时间)->query($sql);
	如果sql不是查询条件语句,缓存设置无效,返回的数据跟mysql_query($sql)一样
	*/
	$this->model->query($sql);
	
其他
	1,查看生成的sql语句,echo $model->sql;或者echo $model->getSql();
	数据库操作有问题时,用来查看生成的sql语句 是否正确
	
	2,使用数据库配置的前缀,$model->pre;
	主要用于写原生的sql语句用到
	
	3 特殊数据库前缀
	$this->model->table('表名',true)->
	table表第二个参数为true时,忽略默认的表前缀
	
	4 操作数据库基类,具体方法查看db/mysql.class.php文件
	$this->model->db->