关闭

thinkphp5.0 对数据库的增删改查操作

标签: thinkphp数据库php
93人阅读 评论(0) 收藏 举报
分类:

  增删改查是数据库的基本操作, 下面总结一下thinkphp5.0关于数据库的增删改查的方法.


1. 增添数据

(1)使用Db类的 insert 方法向数据库中提交数据

$data = ['name'=>'zhangsan', 'age'=>'30'];
Db::table('user')->insert($data);  //向 user 表中添加一条记录

  如果你在 database.php 配置文件中配置了数据库前缀(prefix), 那么可以直接使用 Db 类的 name 方法提交数据,例如:

Db::name('user')->insert($data);   //向 user 表中添加一条记录

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

添加数据的同时返回主键值的方法:
  a.使用 getLastInsID 方法返回新增数据的自增主键值:

Db::name('user')->insert($data);
$userId = Db::name('user')->getLastInsID();    //返回新增数据主键的值

  b.使用 insertGetId 方法新增数据并返回主键值:

Db::name('user')->insertGetId($data);  //在向数据库添加记录的同时返回主键值

注: insertGetId 方法只在添加数据成功时才返回添加数据自增主键的值

(2)添加多条数据

添加多条数据直接向 Db 的insertsAll 方法传入需要添加的数据即可, 例如:

$data = [
        ['name'=>'zhangsan', 'age'=>'20'],
        ['name'=>'lisi', 'age'=>'21'],
        ['name'=>'wangwu', 'age'=>'22']
];
Db::name('user')->insertAll($data);

注: insertAll 方法添加数据成功返回添加成功的条数

(3)助手函数

//添加单条数据
db('user')->insert($data);
//添加多条数据
db('user')->insert($list); 

注意: 使用助手函数默认每次都会重新连接数据库, 而使用Db::naem 或者 Db::table 方法的话都是单例的(单例模式:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 单例模式在操作包含大量数据的数据库时可以避免多次 new 操作 ).


2.删除数据

(1)使用 Db 类的 delete 方法删除数据

//根据主键删除
Db::table('users')->delete(1);  //  删除主键为1的记录
Db::table('user')->delete([1, 2, 3]);   //删除主键为1,2,3的记录
//根据条件删除
Db::table('user')->where('id', 1)->delete();    //删除主键值为1的记录
Db::table('user')->where('id', '<', 10)->delete();  //删除主键值小于10的记录

(2)助手函数

//根据主键删除
db('user')->delete(1);
//条件删除
db('user')->where('id', 1)->delete();

3.更新数据(修改数据)

(1)更新数据表中的值

Db::table('user')->where('id', 1)->update(['name'=>'zhangsan', 'age'=>'30']);

如果数据中含有主键, 则可以直接使用

Db::table('user')->update('name'=>'zhangsan', 'age'=>'30', 'id'=>'5');

注:
  a. 这种方式 update 方法中必须有传入主键的值, 在此例中 id 为主键, 若 update 方法中没有 传入 id 参数, 则无法完成信息的修改.
  b. update 方法返回的是影响数据的条数, 没有修改任何数据则返回 0 .
如果要更新的数据需要使用SQL函数或者其他字段, 可以使用下面的方式:

Db::table('user')
    ->where('id', 1)
    ->update([
        'login_time'=>['exp', 'now()'], //调用 now 函数获取当前时间
        'login_times'=>['exp', login_times + 1] //使用login_times字段
    ]);

(2)更新某个字段的值

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

注: setField 方法返回的是影响的条数, 没有修改任何数据时返回 0 .

(3)自增或者自减一个字段的值

Db::table('user')->where('id', 1)->setInc('score'); // score 自增1
Db::table('user')->where('id', 1)->setInc('score', 3)   //score自增3
Db::table('user')->where('id', 1)->setDec('score'); //score自减1
Db::table('user')->where('id', 1)->setDec('score', 5);  //score 自减5

注: setInc / setDec 方法返回值是影响数据的条数, 如不加第二个参数, 则默认值为 1.

(3)延迟更新
setInc / setDec 函数支持延时更新, 如果需要延迟更新则需要传入第三个参数.

Db::table('user')->where('id', 1)->setInc('score', 1, 10);  //score延迟10秒自增1

(4)助手函数

//更新数据表中的数据
db('user')->where('id', 1)->update(['name'=>'zhangsan']);
//更新某个字段的值
db('user')->where('id', 1)->setField('name', 'zhangsan');
//自增 score 字段
db('user')->where('id', 1)->seInc('score');
//自减 score 字段
db('user')->where('id', 1)->setDec('score');

(5)快捷更新
V5.0.5+以上封装的 data, inc, dec 和 exp 方法属于链式操作方法, 可以配合update 使用, 例如:

Db::table('user')
    ->where('id', 2)
    ->inc('read')  //read 字段值自增1
    ->dec('score', 3)  // score 字段值自减3
    ->exp('name', 'UPPER(name)')  //将name字段值变成大写
    ->update();

4. 查找数据

(1) 基本查询

查询一个数据:

//table 方法必须指定完整的数据表名
Db::table('user')->where('id', 1)->find();

注: find 方法若查询不到结果,则返回 null .

查询数据集使用:

Db::table('user')->where('id', 1)->select();

注: select 方法查询不到结果, 则返回空数组.

如果设置了数据表前缀参数的话, 可以使用:

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

注: 如果你的数据表中没有使用前缀功能, 那么name 和 find 方法的效果是一样的; find 和 select 方法返回的都是数组.

(2)助手函数
系统提供了一个 db 助手函数, 可以更方便的查询:

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

(3)使用Query对象或者闭包查询
a. 使用query 查询对象进行查询, 例如:

$query = new \think\db\Query();
$query->table('user')->where('id', 1);
Db::find($query);
Db::select($query);

b. 使用闭包函数进行查询, 例如:

Db::select(function($query)) {
    $query->table('user')->where('id', 1);
}

(4)值和列的查询

a.查询某个字段的值:

Db::table('user')->where('id', 1)->value('name');

注: 当value 方法查询结果不存在时,返回 null .

b.查询某一列的值:

//返回数组
Db::table('user')->where('id', 1)->column('name');
//指定索引
Db::table('user')->where('id', 1)->column('name', 'id');    //返回的数组的索引值为id

注: column 方法查询结果不存在时,返回的是空数组.

以上就是thinkphp5.0 对数据库的增删改查操作, 希望对你有所帮助. 下面是测试代码:

<?php

namespace app\index\controller;

use think\Db;


class Index {
    public function index() {

    }
    //连接数据库并查询数据
    public function data() {
        //实例化Db类
        //$DB = new Db;
        //查询数据
        //$data = $DB::table("user")->select();
        //$data = $DB::query("select * from user");
        //$data = Db::name('user')->where('user_id', 1)->find();
        //$data = Db::table('user')->where('user_id', 1)->select();

        //使用助手函数查询数据,助手函数默认会每次都会连接数据库
        //$data = db('user')->where("user_id", 1)->find();
        //$data = db('user', [], false)->where('user_id', 1)->select();

        //使用Query对象或闭包查询
        //使用查询对象进行查询
        //$query = new \think\db\Query();
       // $query->table('user')->where('user_id', 1);
        /*$data = Db::find($query);*/

        //使用闭包函数查询
//        $data = Db::select(function($query) {
//            $query->table('user')->where('user_id', 1);
//        });

        //查询某个字段的值
//        $data = Db::table('user')->where('user_id', 1)->value('user_tel');

//        查询某一列的值
//        $data = Db::table('user')->where('user_id', 1)->column('user_tel'); //返回数组
//        dump($data);
        $data = Db::table('user')->where('user_id', 1)->column('user_tel', 'password');  //指定索引
//        $data = Db::table('user')->where('user_id', 1)->column('user_id, user_tel');    //也能返回索引

        //数据集分批处理
//        Db::table('user')->chunk(5, function($users) {
//            foreach ($users as $user) {
//
//                print_r($user);
//            }
//        }, 'hometown');
        //JSON类型数据查询
//        Db::table('user')->where('hometown', '南方')->find();




        dump($data);
}
    //使用方法配置连接数据库
    //使用数组
    /*  public function data1() {
        echo "使用方法配置连接数据库";
         $DB = Db::connect([
                // 数据库类型
                'type'            => 'mysql',
                // 服务器地址
                'hostname'        => '127.0.0.1',
                // 数据库名
                'database'        => 'eating',
                // 用户名
                'username'        => 'root',
                // 密码
                'password'        => '5386',
                // 端口
                'hostport'        => '3306'
            ]);
        $data = $DB->table("user")->select();
        dump($data);
        //使用字符串
        $Db = Db::connect("mysql://root:5386@127.0.0.1:3306/eating#utf8");
        $data = $Db->table("user")->select();
        dump($data);
    }
    //使用模型连接数据库
    public function data2() {
        echo "使用模型连接数据库";
        $user = new \app\index\model\User();
        dump($user::all());

    }*/

    public function insert() {
        $data = ['user_tel'=>'15955702565', 'password'=>'654321', 'hometown'=>'北方', 'tasty'=>'轻口味', 'type_of_cooking'=>'干'];
//        Db::table('user')->insert($data);
//        $res = Db::name('user')->insert($data);

//        dump(Db::name('user')->insertGetId($data));
//        db('user')->insert($data);
//        Db::table('user')
//            ->data(['user_tel'=>'15955702565', 'password'=>'654321', 'hometown'=>'北方', 'tasty'=>'轻口味', 'type_of_cooking'=>'干'])
//            ->insert();
//        dump($res);
    }
    public function update() {
//        $res = Db::table('user')->where('user_id', 3)->update(['user_tel'=>'98765432100']);
//        $res = Db::table('user')->update(['user_tel'=>'98765432101','password'=>'123456789', 'user_id'=>'5']);
//        $res = Db::table('user')->where('user_id', 1)->setInc('user_tel', 3);
//        dump($res);

        db('user')->where('user_id', 5)->update(['user_tel'=>'98765432102']);
    }
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

thinkphp5数据库操作方法小结

一.TP5数据库操作方法     1.name()方法         作用 : 指定默认的数据表名(不含前缀)         示例 : Db::name('weiba_pos...
  • Lovehmm
  • Lovehmm
  • 2016-12-27 09:23
  • 9738

ThinkPHP5 查询数据并处理结果

在处理数据库查询结果时遇到了些问题,记录下用到过的几种查询方式和结果处理。 1. 查询某条记录 $where=array( "version_id"=>$version_id ...
  • tww85
  • tww85
  • 2016-10-21 10:21
  • 7736

ThinkPHP5.0基础增删改查

首先打开官网参考手册http://www.kancloud.cn/manual/thinkphp5/118003 检查所属环境是否否和, 参考官方文档安装TinkPHP5.0(三种方法) 并查看...
  • han_cui
  • han_cui
  • 2017-02-09 16:10
  • 2999

php连接Mysql的增删改查操作

php代码: <?php $conn=mysql_connect('localhost','root',''); if(!$conn){ echo "connect failed"; exit; }...
  • yueqinglkong
  • yueqinglkong
  • 2014-08-28 23:39
  • 16797

Android中数据库的一些操作(增删改查)

提起Android的开发,就不得不提数据库,几乎每个App中都会用到Sqlit数据库存储一些数据,小编闲暇时期,写了一个小demo关于数据库的增删改查,之前也介绍过数据库的一个开源框架ORMLite,...
  • w_l_s
  • w_l_s
  • 2017-03-15 18:42
  • 2177

Statement语句实现数据库的增删改查操作

DButil.java import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties...
  • linhaiyun_ytdx
  • linhaiyun_ytdx
  • 2016-10-12 20:26
  • 1014

VS2013实现数据库的增删改查

1.资源视图下新建资源Dialog,并为对话框添加类,设置类名为SQLDlg。 2.在对话框内拖动添加Edit Control及Button控件并修改其ID。 3.在SQLDlg.cpp中添加...
  • BCD_not_CBD
  • BCD_not_CBD
  • 2016-07-20 17:39
  • 3223

Android本地数据库增删改查 菜单实现

本内容基于《Beginning Android 4 Application Development》Wei-Meng Lee中文版6.3节(P264) 的 创建和使用数据库修改而成 原文为对表cont...
  • haimian520
  • haimian520
  • 2015-11-20 11:21
  • 1933

对数据库进行增删改查操作

本篇文章接上一篇 使用的连接是上一章的JDBC驱动链接的SQLServer驱动 package addressUtil; import java.sql.Connection; impo...
  • blueZhangFun
  • blueZhangFun
  • 2015-06-24 08:09
  • 3058

Oracle中表的创建及表中的增删改查

一、表的定义: 语法格式: Create table tableName(        colName colType[Default defaultExp constraint...
  • super_YC
  • super_YC
  • 2017-03-28 22:20
  • 573
    个人资料
    • 访问:898次
    • 积分:181
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档