thinkphp mysql查询_ThinkPHP 数据库查询

数据库

配置

在数据库配置文件database.php中我们可以配置,数据库的类型,服务器地址,数据库名,用户名,密码,端口,表前缀等。

参数名

描述

默认值type

数据库类型

hostname

数据库地址

127.0.0.1

database

数据库名称

username

数据库用户名

password

数据库密码

hostport

数据库端口号

dsn

数据库连接dsn信息

params

数据库连接参数

charset

数据库编码

utf8

prefix

数据库的表前缀

debug

是否调试模式

false

deploy

数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)

0

rw_separate

数据库读写是否分离 主从式有效

false

master_num

读写分离后 主服务器数量

1

slave_no

指定从服务器序号

fields_strict

是否严格检查字段是否存在

true

resultset_type

数据集返回类型

array

auto_timestamp

自动写入时间戳字段

false

sql_explain

是否需要进行SQL性能分析 开启调试有效

false

query

指定查询对象

think\db\Query

其中数据库调试模式开启可以在日志文件中查看执行sql的相关信息。配置信息可以借助Env进行配置。

数据库查询

数据库查询与三种方式,分别是原生查询,数据库查询,和模型查询。下面会一一介绍。

在查询数据之前,先思考几个小问题:

1、怎么查询一条数据,多条数据,返回值是什么

2、怎么查询一个字段值,一列字段值,返回值是什么

3、怎么插入数据,批量插入,返回值

4、更新某个字段,更新一条数据,更新多条数据

5、实现软删除的手段

6、怎么实现打印sql(fetchSql,select(false))

原生查询

Db类支持原生SQL查询操作,分别是query方法和execute方法。

在原生查询的时候使用参数绑定,包括问号占位符或者命名占位符。

query 该方法主要用于数据库的查询,如果数据非法或查询错误则返回false,否则如果有数据则返回一个二维数组,没数据则返回一个空数组。

例如:

Db::query("select * from think_user where id=? AND status=?", [8, 1]);

execute 该方法主要用于数据的更新或写入,如果数据错误或查询错误则返回false,否则返回受影响的行数。

例如:

Db::execute("update think_user set name=:name where status=:status", ['name' => 'thinkphp', 'status' => 1])

数据库查询

注意:table方法参数是数据表的完整的名字,而name方法的参数在配置表前缀的前提下的表名,否则是数据表的完整的名字

插入数据

insert 返回添加成功的条数

Db::name('student')->insert($data);

insertGetId 返回添加数据的自增主键

Db::name('student')->insertGetId($data);

insertAll 返回添加成功的条数

//二维数组data数据一次性插入

Db::name('student')->insertAll($data);

//二维数组data数据分批次插入,每次插入50条

Db::name('student')->limit(50)->insertAll($data);

究竟我是怎么知道的?把sql打印或者查看日志就明白是怎么回事了。

查询数据

find 查询一条数据,如果有数据返回一维数组,没数据的话返回NULL

Db::name('student')->where('id',1)->find();

select 查询一条数据或多条数据,返回的二维数组,如果没找到数据,返回空数组

Db::name('student')->where('id','>',10)->select();

value 返回某一字段的值或者NULL

Db::name('student')->where('id',10)->value('name');

column 返回一列,一维数组或者空数组

Db::name('student')->where('id',10)->column('name');

更新数据

setField 更新字段值,返回影响数据的条数,没修改任何数据字段返回 0

Db::name('user')->where('id',1)->setField('name', 'thinkphp');

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

Db::name('user')->where('id', 1)->update(['name' => 'thinkphp']);

删除数据

delete 方法返回影响数据的条数,没有删除返回 0

Db::table('think_user')->where('id','delete();

模型查询

在定义模型之前,先了解常用的模型设置属性:

属性

描述name

模型名(默认为当前不含后缀的模型类名)

table

数据表名(默认自动获取)

pk

主键名(默认为id)

connection

数据库连接(默认读取数据库配置)

query

模型使用的查询类名称

field

模型对应数据表的字段列表(数组)

在模型中除了可以调用数据库类的方法之外(换句话说,数据库的所有查询方法模型中都可以支持),可以定义自己的方法,所以也可以把模型看成是数据库的增强版。

模型操作和数据库操作的区别:一是返回结果不同,另外一个显著区别是模型支持包括获取器、修改器、自动完成在内的一系列自动化操作和事件,简化了数据的存取操作。

插入数据

新增数据的最佳实践原则:使用create方法新增数据,使用saveAll批量新增数据

1、save 返回影响的记录数,首先实例化模型,然后赋值,最后再save

$user = new User([

'name' => 'thinkphp',

'email' => 'thinkphp@qq.com'

]);

$user->save();

2、saveAll方法新增数据返回的是包含新增模型(带自增ID)的数据集对象

$user = new User;

$list = [

['name'=>'thinkphp','email'=>'thinkphp@qq.com'],

['name'=>'onethink','email'=>'onethink@qq.com']

];

$user->saveAll($list);

3、create方法返回的是当前模型的对象实例

$user = User::create([

'name' => 'thinkphp',

'email' => 'thinkphp@qq.com'

]);

echo $user->id; // 获取自增ID

更新

更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新,如果不需要使用事件,直接使用静态的Update方法进行条件更新,如非必要,尽量不要使用批量更新。

1、save 更新返回影响的记录数

$user = User::where('status',1)->where('name','liuchen')->find();

$user->name = 'thinkphp';

$user->email = 'thinkphp@qq.com';

$user->save();

2、update更新,数据库的update方法返回影响的记录数,模型的update方法返回模型的对象实例

User::where('id', 1)->update(['name' => 'thinkphp']);

User::update(['id' => 1, 'name' => 'thinkphp']);

删除数据

删除的最佳实践原则是:如果删除当前模型数据,用delete方法,如果需要直接删除数据,使用destroy静态方法

User::where('id','>',10)->delete();

查询数据

1、模型查询和数据库查询方法的区别主要在于,模型中的查询的数据在获取的时候会经过获取器的处理,以及更加对象化的获取方式

2、模型查询除了使用自身的查询方法外,一样可以使用数据库的查询构造器,返回的都是模型对象实例

3、模型查询的最佳实践原则是:在模型外部使用静态方法进行查询,内部使用动态方法查询,包括使用数据库的查询构造器。模型的查询始终返回对象实例,但可以和数组一样使用

本作品采用《CC 协议》,转载必须注明作者和本文链接

趁还没掉光,赶紧给每根头发起个名字吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值