数据库的基本操作大全tp5

学习内容及参考:

视频教程:

http://www.kancloud.cn/tpshop/thinkphp5/221597

http://www.kancloud.cn/tpshop/thinkphp5/221836

完全开发手册:http://www.kancloud.cn/manual/thinkphp5/158834

教程中的代码:https://github.com/phpervip/tp5a

课前准备:

1.安装sql追踪器,

2.了解mysql基础,mysql预处理语句prepare,execute

3.了解mysql事务处理

4.安装使用sqlyong工具。

工欲善其事,必先利其器

mac下sql追踪器的安装,

http://www.tp-shop.cn/index.php/doc/indexbbc/video

https://pan.baidu.com/s/1pK7RhaV?qq-pf-to=pcqq.group

下载phpgjx工具箱,

然后按教程安装即可,当作搭建一个网站。。

本地我把log文件放在,/usr/local/mysql/log/mysql_bz2.log

注意,文件要给777权限。

另外,图片我换成,莲花,大海。

可打包下载我的图片:http://pan.baidu.com/s/1dFy4ENB

搭好的效果。http://www.kancloud.cn/tpshop/thinkphp5/221597.

http://phpgjx.yyii.info

**推荐此工具!**

**能很快看出页面,调用的sql,若sql出现bug,能很快知道在代码哪一句。**

/usr/local/mysql/bin/mysqld,Version: 5.7.16 (MySQL Community Server(GPL)). started with:

Tcpport: 3306 Unix socket: /tmp/mysql.sock

TimeId Command Argument

prepare,是mysql的预处理,

execute,是mysql的执行


事务是一个连续的一组数据库操作,如果事务中某个操作失败,则整个事务失败。

有了上面的基础,就开始学习下面的内容。

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. namespace app\ admin\ controller;
  4. use think\ Db;
  5. class index2
  6. {
  7. // 查询数据
  8. public function test1(){
  9. // 基本使用
  10. // 插入记录
  11. Db::execute( 'insert into tp_user (id,name) values(?,?)',[ 8, 'thinkphp']);
  12. // 更新记录
  13. Db::execute( 'update tp_user set name="thinkphp" where id=1 ');
  14. // 查询数据
  15. Db::query( 'select * from tp_user where id=?',[ 8]);
  16. // 删除数据
  17. Db::query( 'delete from tp_user where id=5');
  18. // 显示数据列表
  19. Db::query( 'show tables from tp5');
  20. // 清空数据表
  21. Db::execute( 'TRUNCATE table tp_user');
  22. // 命名占位符
  23. Db::query( 'select * from tp_user where id=:id',[ 1]);
  24. Db::execute( 'insert into tp_user (id,name) values(:id,:name)',[ 8, 'thinkphp']);
  25. // 查询构造器
  26. // 查询一个数据
  27. Db::table( 'tp_user')->where( 'id', 1)->find();
  28. // 找不到返回null
  29. // 查询数据集
  30. Db::table( 'tp_user')->where( 'status', 1)->select();
  31. // 找不到返回空数组
  32. // 设置了表前缀时
  33. Db::name( 'user')->where( 'id', 1)->find();
  34. Db::name( 'user')->where( 'status', 1)->select();
  35. // find,select 方法之前可以使用所有的链式操作方法
  36. // db助手函数
  37. db( 'user')->where( 'id', 1)->find();
  38. // 使用db助手函数默认每次重新连接数据库,而使用Db::name,或Db::table都是单例的
  39. // 如需要采用相同的链接,可以传入第三个参数。第二个参数为数据库的连接参数
  40. db( 'user',[], false)->where( 'id', 1)->find();
  41. // 使用query对象或闭包查询
  42. $query = new \think\db\Query();
  43. $query->table( 'tp_user')->where( 'status', 1);
  44. Db::find($query);
  45. // Db::select($query);
  46. Db::select( function($query){
  47. $query->table( 'tp_user')->where( 'status', 1);
  48. });
  49. // 返回某个字段值,
  50. Db::table( 'tp_user')->where( 'id', 1)->value( 'name');
  51. // 查询某一列的值
  52. Db::table( 'tp_user')->where( 'status', 1)->column( 'name');
  53. // 指定索引
  54. Db::table( 'tp_user')->where( 'status', 1)->column( 'name', 'id');
  55. // 数据集批量处理
  56. Db::table( 'tp_user')->chunk( 100, function($users){
  57. foreach($users as $user){
  58. //
  59. echo '1';
  60. }
  61. });
  62. // 或者交给回调方法myUserIterator处理
  63. Db::table( 'tp_user')->chunk( 100, 'myUserIterator');
  64. // 你可以通过从闭包函数中返回false来中止对数据集的处理
  65. Db::table( 'tp_user')->chunk( 100, function($users){
  66. // 处理结果集
  67. return false;
  68. });
  69. // 也支持在 chunk 方法之前调用其它的查询方法
  70. Db::table( 'tp_user')->where( 'score', '>', 80)->chunk( 100, function($users){
  71. foreach($users as $user){
  72. //
  73. }
  74. });
  75. // JSON类型数据查询
  76. // 查询JSON类型字段,info字段为json类型
  77. Db::table( 'tp_user')->where( 'info$.email', '[email protected]')->find();
  78. }
  79. // 添加数据
  80. public function test2(){
  81. // 5版本,添加 data/inc/dec/exp方法设置数据
  82. $data = [ 'foo'=> 'bar', 'bar'=> 'foo'];
  83. Db::table( 'tp_user')->insert($data);
  84. Db::name( 'user')->insert($data);
  85. // insert 方法添加数据成功返回添加的条数,正常情况返回1
  86. Db::name( 'user')->insert($data);
  87. $userId = Db::name( 'user')->getLastInsID();
  88. // 或者直接使用inserGetId方法新增数据并返回主键值
  89. Db::name( 'user')->insertGetId($data);
  90. // 添加多条数据
  91. $data = [
  92. [ 'foo'=> 'bar', 'bar'=> 'foo'],
  93. [ 'foo'=> 'bar1', 'bar'=> 'foo1'],
  94. [ 'foo'=> 'bar2', 'bar'=> 'foo2'],
  95. ];
  96. Db::name( 'user')->insertAll($data);
  97. // 助手函数
  98. db( 'user')->insert($data);
  99. db( 'user')->insertAll($data);
  100. // 快捷更新
  101. Db::table( 'user')
  102. ->data([ 'name'=> 'tp', 'score'=> 90])
  103. ->insert();
  104. }
  105. // 更新数据
  106. public function test3(){
  107. Db::table( 'tp_user')
  108. ->where( 'id', 1)
  109. ->update([ 'name'=> 'thinkphp']);
  110. // 数据中包含主键,直接使用
  111. Db::table( 'tp_user')
  112. ->update([ 'name'=> 'thinkphp', 'id'=> 1]);
  113. // update方法返回影响数据的条数,没修改任何数据返回0
  114. // 使用Sql函数
  115. Db::table( 'tp_user')
  116. ->where( 'id', 1)
  117. ->update([
  118. 'login_time'=>[ 'exp', 'now()'],
  119. 'login_times'=>[ 'exp', 'login_times+1']
  120. ]
  121. );
  122. // 更新某个字段的值
  123. Db::table( 'tp_user')
  124. ->where( 'id', 1)
  125. ->setField( 'name', 'thinkphp');
  126. // 自增自减
  127. // setInc/setDec
  128. Db::table( 'tp_user')
  129. ->where( 'id', 1)
  130. ->setInc( 'score');
  131. Db::table( 'tp_user')
  132. ->where( 'id', 1)
  133. ->setInc( 'score', 5);
  134. Db::table( 'tp_user')
  135. ->where( 'id', 1)
  136. ->setDec( 'score');
  137. Db::table( 'tp_user')
  138. ->where( 'id', 1)
  139. ->setDec( 'score', 5);
  140. // 延迟更新
  141. Db::table( 'tp_user')->where( 'id', 1)->setInc( 'score', 1, 10);
  142. // 助手函数
  143. db( 'user')->where( 'id', 1)->update([ 'name'=> 'thinkphp']);
  144. db( 'user')->where( 'id', 1)->setField( 'name', 'thinkphp');
  145. db( 'user')->where( 'id', 1)->setInc( 'score');
  146. db( 'user')->where( 'id', 1)->setDec( 'score');
  147. // 快捷更新
  148. Db::table( 'tp_user')
  149. ->where( 'id', 1)
  150. ->inc( 'read')
  151. ->dec( 'score', 3)
  152. ->exp( 'name', 'UPPER(name)')
  153. ->update();
  154. }
  155. }

猜你喜欢

转载自blog.csdn.net/heyuqing32/article/details/80948902
今日推荐