多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 慕课网-《快速入门ThinkPHP 5.0--模型篇》学习笔记 [https://www.imooc.com/learn/854](https://www.imooc.com/learn/854) ***** # 数据库的连接操作 **数据库配置** > 可在 config/database.php 配置数据库信息 **数据库链接方式** 1. 方法一 (database.php配置法) ``` use think\Db; $res = Db::connect(); ``` 2. 方法二 (数组配置法) ``` use think\Db; $res = Db::connect([ 'type' => 'mysql', 'hostname' => 'localhost', 'database' => 'oldyellow', 'username' => 'root', 'password' => 'root', ]); ``` 3. 方法三 (DSN配置法) ``` use think\Db; $res = Db::connect("mysql://root:1234@127.0.0.1:3306/thinkphp#utf8"); ``` 4. 方法四 (数据库配置文件中自定义配置文件) ``` 'db_config1' => [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '192.168.1.8', // 数据库名 'database' => 'db_config1', // 数据库用户名 'username' => 'root', // 数据库密码 'password' => '1234', // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => 'think_', ], //数据库配置2 'db_config2' => 'mysql://root:1234@192.168.1.10:3306/db_config2#utf8', ``` ``` use think\Db; $res = Db::connect('db_config1'); ``` ***** # 数据库查询操作 **数据库链接方式** 1. Db类 ``` use think\Db; Db::table('tp_user')->find(); // name 可省略前缀 Db::name('user')->find(); ``` 2. db助手函数 无需引入Db类,同样可省略前缀 ``` // 每次都数据库实例化 db('user')->find(); ``` **数据查询** - select 多条数据 没回返回空数组 ``` Db::name('user')->select(); ``` - column 多条数据 没回返回空数组 必须有参数 参数是表字段名 ``` Db::name('user')->column('username'); ``` - find 一条最小(旧)数据 没回返回NULL ``` Db::name('user')->find(); ``` - value 一条最小(旧)数据值 没回返回NULL 必须有参数 参数是表字段名 ``` Db::name('user')->value(); ``` ***** # 添加数据 > 表链接可以定义给一个变量 ``` $db = Db::name('user'); ``` 1. insert 返回值是影响记录的行数 ``` $res = $db->insert([ 'username'=>'oy', 'password'=>md5('oyoyoy'), 'email'=>'oy@qq.com' ]); dump($res); ``` 2. insertGetId 返回值是添加数据的id ``` // 参数内容一样 ``` 3. insertAll 多条数据添加 返回值是成功插入行数 ``` $data = []; $res = $db->insertAll($data); dump($res); ``` ***** # 数据库更新操作 数据更新都需要 **where** 条件,返回的都是影响行数 > 同上便于使用,表链接可以定义给一个变量 ``` $db = Db::name('user'); ``` 1. update 适合多条数据更新 ``` $res = $db->where([ 'id' => 1 ])->update([ 'username' => 'oy111111', 'email' => 'oy@qq.com111111' ]); ``` 2. setField 适合只更新一个字段 ``` $res = $db->where([ 'id' => 1 ])->setField('username','oy222222'); ``` 3. setInc 自增一,第二个参数设置自增数量 ``` $res = $db->where([ 'id' => 1 ])->setInc('num'); ``` ``` // 自增5 setInc('num',5); ``` 4. setDec 自减一,第二个参数设置自减数量 ``` $res = $db->where([ 'id' => 1 ])->setDec('num'); ``` ``` // 自减5 setDec('num',5); ``` ***** # 数据库删除操作 同样,删除数据也都需要 **where** 条件,返回的是删除的行数 删除方法就一种 delete ``` $db = Db::name('user'); $res = $db->where([ 'id' => 6 ])->delete(); ``` 如果删除是条件是 id 主键 ``` $res = $db->delete(5); ``` 删除全部数据(**禁止在生产环境使用!**) ``` $res = $db->where("1=1")->delete(); ``` ***** # 条件构造器 > buildSql() 返回 sql 语句,适合调试查看 ``` $res = $db->where([ 'id' => 1 ])->buildSql(); ``` 这四个结果是一样的 ``` $res = $db->where(['id' => 1])->select(); $res = $db->where('id',1)->select(); $res = $db->where('id=1')->select(); $res = $db->whereId(1)->select(); ``` **条件查询** > where('字段名','表达式','查询条件'); 表达式:[https://www.kancloud.cn/manual/thinkphp5_1/354004](https://www.kancloud.cn/manual/thinkphp5_1/354004) - 一般查询 ``` where('id','=','1') ``` - AND查询 ``` ->where('id','=','1') ->where('name','=','oy') ``` - OR查询 ``` ->where('id','=','1') ->whereOr('name','=','oy') ``` - 自定义查询 EXP ``` $db\->where('id','EXP','IN(1,2,3)')->buildSql() ``` 输出 ``` ( SELECT * FROM `tp_user` WHERE ( `id` IN(1,2,3) ) ) ``` ***** # 链式操作 > Db类的链式方法会返回一个Db类,我们可以对他继续使用Db链式方法 链式操作:[https://www.kancloud.cn/manual/thinkphp5_1/354005](https://www.kancloud.cn/manual/thinkphp5_1/354005) ``` $res = Db::name('user') ->where('id', '>', 2) ->field('username, id') ->order('id DESC') ->select(); dump($res); ``` 其实类似 gulp 中的 pipe 管道 *****