热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

学习内容及参考:视频教程:http:www.kancloud.cntpshopthinkphp5221597http:www.kancloud.cntpshopthinkph

学习内容及参考:

视频教程:

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/123456@127.0.0.1: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;


use think\Db;class index2
{// 查询数据public function test1(){// 基本使用// 插入记录Db::execute('insert into tp_user (id,name) values(?,?)',[8,'thinkphp']);// 更新记录Db::execute('update tp_user set name="thinkphp" where id=1 ');// 查询数据Db::query('select * from tp_user where id=?',[8]);// 删除数据Db::query('delete from tp_user where id=5');// 显示数据列表Db::query('show tables from tp5');// 清空数据表Db::execute('TRUNCATE table tp_user');// 命名占位符Db::query('select * from tp_user where id=:id',[1]);Db::execute('insert into tp_user (id,name) values(:id,:name)',[8,'thinkphp']);// 查询构造器// 查询一个数据Db::table('tp_user')->where('id',1)->find();// 找不到返回null// 查询数据集Db::table('tp_user')->where('status',1)->select();// 找不到返回空数组// 设置了表前缀时Db::name('user')->where('id',1)->find();Db::name('user')->where('status',1)->select();// find,select 方法之前可以使用所有的链式操作方法// db助手函数db('user')->where('id',1)->find();// 使用db助手函数默认每次重新连接数据库,而使用Db::name,或Db::table都是单例的// 如需要采用相同的链接,可以传入第三个参数。第二个参数为数据库的连接参数db('user',[],false)->where('id',1)->find();// 使用query对象或闭包查询$query = new \think\db\Query();$query->table('tp_user')->where('status',1);Db::find($query);// Db::select($query);Db::select(function($query){$query->table('tp_user')->where('status',1);});// 返回某个字段值,Db::table('tp_user')->where('id',1)->value('name');// 查询某一列的值Db::table('tp_user')->where('status',1)->column('name');// 指定索引Db::table('tp_user')->where('status',1)->column('name','id');// 数据集批量处理Db::table('tp_user')->chunk(100,function($users){foreach($users as $user){//echo '1';}});// 或者交给回调方法myUserIterator处理Db::table('tp_user')->chunk(100,'myUserIterator');// 你可以通过从闭包函数中返回false来中止对数据集的处理Db::table('tp_user')->chunk(100,function($users){// 处理结果集return false;});// 也支持在 chunk 方法之前调用其它的查询方法Db::table('tp_user')->where('score','>',80)->chunk(100,function($users){foreach($users as $user){//}});// JSON类型数据查询// 查询JSON类型字段,info字段为json类型Db::table('tp_user')->where('info$.email','thinkphp@qq.com')->find();}// 添加数据public function test2(){// 5版本,添加 data/inc/dec/exp方法设置数据$data = ['foo'=>'bar','bar'=>'foo'];Db::table('tp_user')->insert($data);Db::name('user')->insert($data);// insert 方法添加数据成功返回添加的条数,正常情况返回1Db::name('user')->insert($data);$userId = Db::name('user')->getLastInsID();// 或者直接使用inserGetId方法新增数据并返回主键值Db::name('user')->insertGetId($data);// 添加多条数据$data = [['foo'=>'bar','bar'=>'foo'],['foo'=>'bar1','bar'=>'foo1'],['foo'=>'bar2','bar'=>'foo2'],];Db::name('user')->insertAll($data);// 助手函数db('user')->insert($data);db('user')->insertAll($data);// 快捷更新Db::table('user')->data(['name'=>'tp','score'=>90])->insert();}// 更新数据public function test3(){Db::table('tp_user')->where('id',1)->update(['name'=>'thinkphp']);// 数据中包含主键,直接使用Db::table('tp_user')->update(['name'=>'thinkphp','id'=>1]);// update方法返回影响数据的条数,没修改任何数据返回0// 使用Sql函数Db::table('tp_user')->where('id',1)->update(['login_time'=>['exp','now()'],'login_times'=>['exp','login_times+1']]);// 更新某个字段的值Db::table('tp_user')->where('id',1)->setField('name','thinkphp');// 自增自减// setInc/setDecDb::table('tp_user')->where('id',1)->setInc('score');Db::table('tp_user')->where('id',1)->setInc('score',5);Db::table('tp_user')->where('id',1)->setDec('score');Db::table('tp_user')->where('id',1)->setDec('score',5);// 延迟更新Db::table('tp_user')->where('id',1)->setInc('score',1,10);// 助手函数db('user')->where('id',1)->update(['name'=>'thinkphp']);db('user')->where('id',1)->setField('name','thinkphp');db('user')->where('id',1)->setInc('score');db('user')->where('id',1)->setDec('score');// 快捷更新Db::table('tp_user')->where('id',1)->inc('read')->dec('score',3)->exp('name','UPPER(name)')->update();}
}




推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
author-avatar
wjwakx5792
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有