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->