1)连接数据库
连接数据库需要先配置数据库信息,在 Conf/config.php 处增加:
return array(
//'配置项'=>'配置值'
'DB_TYPE' => 'mysql', //数据类型
'DB_HOST' => 'localhost, localhost1, localhost2', //数据服务器地址
'DB_NAME' => 'muke', //数据库名
'DB_USER' => 'root', //数据库用户名
'DB_PWD' => 'root', //数据库用户密码
'DB_PORT' => '3306', //数据库端口
'DB_PREFIX' => 'mk_', //数据库表前缀
'DB_RW_SEPARATE'=>true, //开启主从读写分离
'DB_MASTER_NUM'=>'2', //主数据库服务器数量
);
// 需要注意的是,ThinkPHP的数据库连接的惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。
2)实例化模型
使用数据库:muke.sql;
1.实例化基础模型 model
//实例化User模型
$user = new Model('User');
//或者使用M()快捷方法实例化,和上面的方法是等效的
$user = M('User');
//执行其他的数据操作
$user->select();
2.实例化用户自定义模型
//D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化Model基类,同时对于已实例化过的模型,不会重复去实例化。
//实例化自定义模型
$user = new UserModel();
//或者使用D快捷方法
$user = D('User');
//执行具体的数据操作
$data = $user->select();
dump($data);
3.实例化公共模型
// 为了省去为每个数据表定义具体的模型类,可以在 \Lib\Model\ 文件夹下建立建立公共模型 CommonModel.class.php,该模型继承 Model,然后在CommonModel类里面定义一些通用的逻辑方法,其他模型则继承该公共模型即可。
4.实例化空模型
//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
//进行读取操作(select)时,使用query
$data = $model->query('select * from mk_user');
//进行写入操作(update、insert)时,使用execute
$data = $model->execute('update mk_user set nick_name = "dddd" where id="4" ');
3)CURD操作之添加数据
添加数据可以使用 add、addAll 方法,另外查询最后一条SQL可以使用 getLastSql 方法查询,也可以开启 SHOW_PAGE_TRACE 查看;
// 插入数据,等同:
INSERT INTO `mk_user` (`user_name`,`nick_name`,`password`,`create_date`,`update_date`,`score`) VALUES ('xiaoming','小明','e10adc3949ba59abbe56e057f20f883e',1484884772,1484884772,100);
$data = array(
'user_name'=>'xiaoming',
'nick_name'=>'小明',
'password'=>md5('123456'),
'create_date'=>time(),
'update_date'=>time(),
'score'=>100
);
echo M('user')->add($data);
// 一次性插入多条数据,等同:
INSERT INTO `mk_user` (`user_name`,`nick_name`,`password`,`create_date`,`update_date`,`score`) VALUES ('xiaohong','小红','e10adc3949ba59abbe56e057f20f883e',1484884772,1484884772,100),('xiaobai','小白','e10adc3949ba59abbe56e057f20f883e',1484884772,1484884772,100);
$data = array(
0 => array(
'user_name'=>'xiaohong',
'nick_name'=>'小红',
'password'=>md5('123456'),
'create_date'=>time(),
'update_date'=>time(),
'score'=>100
),
1 => array(
'user_name'=>'xiaobai',
'nick_name'=>'小白',
'password'=>md5('123456'),
'create_date'=>time(),
'update_date'=>time(),
'score'=>100
)
);
echo M('user')->addAll($data);
// 查询最后一条sql
echo M()->getLastSql();
4)CURD操作之查询数据
1.直接使用字符串进行查找
$data = M('User')->where('id = 1')->select();
//得到的查询条件是:( id = 1 )
2.使用数组方式进行查询
$where['id'] = 2;
$where['user_name'] = 'zjc';
$where['_logic'] = 'or';
$data = M('User')->where($where)->select();
//得到的查询条件是:( `id` = 2 ) OR ( `user_name` = 'zjc' )
3.表达式查询 eq neq egt gt lt elt between in like not between not in
// $where['字段名'] = array(表达式, 查询条件);
// $where['id'] = array('gt', 1);
// $where['id'] = array('between','1,8');
$where['id'] = array('not in','1,8');
// $where['user_name'] = array('like', '%ming');
$where['user_name'] = array('like', array('%ming', 'xiao%'));
$data = M('User')->where($where)->select();
//得到的查询条件是:( `id` NOT IN ('1','8') ) AND ( (`user_name` LIKE '%ming' OR `user_name` LIKE 'xiao%') )
4.区间查询
// $where['id'] = array(array('gt',1),array('lt',10)); //默认用and
$where['id'] = array(array('lt',1),array('gt',10), 'or');
//得到的查询条件是:( (`id` < 1) OR (`id` > 10) )
5.混合用法
$where['id'] = array('gt', 10);
$where['_string'] = ' score > 10';
$data = M('User')->where($where)->select();
//得到的查询条件是:( `id` > 10 ) AND ( score > 10 )
6.统计用法
/*
* count 可选
* max 必须传入统计的字段名
* min 必须传入统计的字段名
* avg 必须传入统计的字段名
* sum 必须传入统计的字段名
*/
// $data = M('User')->count();
$data = M('User')->max('id');
//得到的查询条件是:SELECT MAX(id) AS tp_max FROM `mk_user` LIMIT 1
5)CURD操作之更新数据
$update['score'] = 60;
$where['id'] = 1;
$data = M('User')->where($where)->save($update);
//得到的查询条件是:UPDATE `mk_user` SET `score`=60 WHERE ( `id` = 1 )
6)CURD操作之删除数据
$where['id'] = 1;
echo M('User')->where($where)->delete(); //输出“1”
// 上面等同:echo M('User')->delete(1);
//得到的查询条件是:DELETE FROM `mk_user` WHERE ( `id` = 1 )