ThinkPHP学习笔记(四):数据库操作一

本文介绍了如何使用ThinkPHP框架连接数据库、实例化模型,并详细阐述了CRUD操作的方法,包括添加、查询、更新和删除数据的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值