ThinkPHP5学习(8)数据库-基本操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kwame211/article/details/82866126

1.数据库配置

2.query,execute原生态sql语句,增删改查

3.参数绑定命名占位符绑定

4.多个数据切换查询操作

5.查询构造器

6.DB链式操作

7.事务支持

ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作。

数据库配置。

application/database.php

每个模块可以设置独立的数据库连接参数,admin/database.php

可以采用字符串方式,动态定义连接信息

Db::connect('mysql://root/[email protected]:3306/thinkphp#utf8');

如database.php中已经定义好,

可以写:

Db::connect('db_config1);

Db::connect('db_config2);

也可以在模型里单独设置数据库连接信息

创建一个表:

CREATETABLE `tp_user` (

`id`int(11) NOT NULL,

`name`varchar(45) DEFAULT NULL,

`status`tinyint(1) DEFAULT NULL,

`score`tinyint(2) DEFAULT NULL,

`email`varchar(45) DEFAULT NULL,

PRIMARYKEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

出现:

Class'app\admin\controller\Db' not found

则:

use think\Db;

 
  1. <?php

  2.  
  3. // 数据库

  4.  
  5. namespace app\admin\controller;

  6. use think\Db;

  7.  
  8. class index2

  9. {

  10. // 查询数据

  11. public function test1(){

  12. // 基本使用

  13.  
  14. // 插入记录

  15. Db::execute('insert into tp_user (id,name) values(?,?)',[8,'thinkphp']);

  16. // 更新记录

  17. Db::execute('update tp_user set name="thinkphp" where id=1 ');

  18. // 查询数据

  19. Db::query('select * from tp_user where id=?',[8]);

  20. // 删除数据

  21. Db::query('delete from tp_user where id=5');

  22. // 显示数据列表

  23. Db::query('show tables from tp5');

  24. // 清空数据表

  25. Db::execute('TRUNCATE table tp_user');

  26.  
  27.  
  28. // 命名占位符

  29. Db::query('select * from tp_user where id=:id',[1]);

  30. Db::execute('insert into tp_user (id,name) values(:id,:name)',[8,'thinkphp']);

  31.  
  32. // 查询构造器

  33. // 查询一个数据

  34. Db::table('tp_user')->where('id',1)->find();

  35. // 找不到返回null

  36. // 查询数据集

  37. Db::table('tp_user')->where('status',1)->select();

  38. // 找不到返回空数组

  39.  
  40. // 设置了表前缀时

  41. Db::name('user')->where('id',1)->find();

  42. Db::name('user')->where('status',1)->select();

  43.  
  44.  
  45. // find,select 方法之前可以使用所有的链式操作方法

  46. // db助手函数

  47. db('user')->where('id',1)->find();

  48.  
  49. // 使用db助手函数默认每次重新连接数据库,而使用Db::name,或Db::table都是单例的

  50. // 如需要采用相同的链接,可以传入第三个参数。第二个参数为数据库的连接参数

  51. db('user',[],false)->where('id',1)->find();

  52.  
  53.  
  54.  
  55. // 使用query对象或闭包查询

  56. $query = new \think\db\Query();

  57. $query->table('tp_user')->where('status',1);

  58. Db::find($query);

  59. // Db::select($query);

  60.  
  61. Db::select(function($query){

  62. $query->table('tp_user')->where('status',1);

  63. });

  64.  
  65. // 返回某个字段值,

  66. Db::table('tp_user')->where('id',1)->value('name');

  67.  
  68. // 查询某一列的值

  69. Db::table('tp_user')->where('status',1)->column('name');

  70. // 指定索引

  71. Db::table('tp_user')->where('status',1)->column('name','id');

  72.  
  73. // 数据集批量处理

  74.  
  75. Db::table('tp_user')->chunk(100,function($users){

  76. foreach($users as $user){

  77. //

  78. echo '1';

  79. }

  80. });

  81.  
  82. // 或者交给回调方法myUserIterator处理

  83. Db::table('tp_user')->chunk(100,'myUserIterator');

  84.  
  85. // 你可以通过从闭包函数中返回false来中止对数据集的处理

  86. Db::table('tp_user')->chunk(100,function($users){

  87. // 处理结果集

  88. return false;

  89.  
  90. });

  91.  
  92. // 也支持在 chunk 方法之前调用其它的查询方法

  93. Db::table('tp_user')->where('score','>',80)->chunk(100,function($users){

  94. foreach($users as $user){

  95. //

  96. }

  97. });

  98.  
  99. // JSON类型数据查询

  100. // 查询JSON类型字段,info字段为json类型

  101. Db::table('tp_user')->where('info$.email','[email protected]')->find();

  102.  
  103.  
  104.  
  105.  
  106. }

  107.  
  108. // 添加数据

  109. public function test2(){

  110.  
  111. // 5版本,添加 data/inc/dec/exp方法设置数据

  112. $data = ['foo'=>'bar','bar'=>'foo'];

  113. Db::table('tp_user')->insert($data);

  114.  
  115. Db::name('user')->insert($data);

  116.  
  117. // insert 方法添加数据成功返回添加的条数,正常情况返回1

  118. Db::name('user')->insert($data);

  119. $userId = Db::name('user')->getLastInsID();

  120. // 或者直接使用inserGetId方法新增数据并返回主键值

  121. Db::name('user')->insertGetId($data);

  122.  
  123.  
  124. // 添加多条数据

  125. $data = [

  126. ['foo'=>'bar','bar'=>'foo'],

  127. ['foo'=>'bar1','bar'=>'foo1'],

  128. ['foo'=>'bar2','bar'=>'foo2'],

  129. ];

  130. Db::name('user')->insertAll($data);

  131.  
  132. // 助手函数

  133. db('user')->insert($data);

  134. db('user')->insertAll($data);

  135.  
  136. // 快捷更新

  137. Db::table('user')

  138. ->data(['name'=>'tp','score'=>90])

  139. ->insert();

  140.  
  141. }

  142.  
  143.  
  144. // 更新数据

  145. public function test3(){

  146. Db::table('tp_user')

  147. ->where('id',1)

  148. ->update(['name'=>'thinkphp']);

  149. // 数据中包含主键,直接使用

  150. Db::table('tp_user')

  151. ->update(['name'=>'thinkphp','id'=>1]);

  152. // update方法返回影响数据的条数,没修改任何数据返回0

  153.  
  154. // 使用Sql函数

  155. Db::table('tp_user')

  156. ->where('id',1)

  157. ->update([

  158. 'login_time'=>['exp','now()'],

  159. 'login_times'=>['exp','login_times+1']

  160. ]

  161. );

  162.  
  163. // 更新某个字段的值

  164. Db::table('tp_user')

  165. ->where('id',1)

  166. ->setField('name','thinkphp');

  167.  
  168. // 自增自减

  169. // setInc/setDec

  170. Db::table('tp_user')

  171. ->where('id',1)

  172. ->setInc('score');

  173.  
  174. Db::table('tp_user')

  175. ->where('id',1)

  176. ->setInc('score',5);

  177.  
  178. Db::table('tp_user')

  179. ->where('id',1)

  180. ->setDec('score');

  181.  
  182. Db::table('tp_user')

  183. ->where('id',1)

  184. ->setDec('score',5);

  185.  
  186. // 延迟更新

  187. Db::table('tp_user')->where('id',1)->setInc('score',1,10);

  188.  
  189. // 助手函数

  190. db('user')->where('id',1)->update(['name'=>'thinkphp']);

  191.  
  192. db('user')->where('id',1)->setField('name','thinkphp');

  193.  
  194. db('user')->where('id',1)->setInc('score');

  195.  
  196. db('user')->where('id',1)->setDec('score');

  197.  
  198. // 快捷更新

  199. Db::table('tp_user')

  200. ->where('id',1)

  201. ->inc('read')

  202. ->dec('score',3)

  203. ->exp('name','UPPER(name)')

  204. ->update();

  205.  
  206. }

  207. }

猜你喜欢

转载自blog.csdn.net/kwame211/article/details/82866126