0

0

关于thinkphp5.0数据库操作的案例

jacklove

jacklove

发布时间:2018-06-15 11:03:30

|

3670人浏览过

|

来源于php中文网

原创

一、支持数据库的类型

Mysql,SqlServer,pgSQL,Sqlite等数据库的支持

二、如何连接数据库

1.配置文件定义

a.配置文件目录
项目\application\database.php
b.如何配置

return [    // 数据库类型
    'type'            => 'mysql',    // 服务器地址
    'hostname'        => '127.0.0.1',    // 数据库名
    'database'        => '',    // 用户名
    'username'        => 'root',    // 密码
    'password'        => '',    // 端口
    'hostport'        => '3306',
];

c.如何使用

// 实例化系统数据库类$DB=new Db;// 查询数据$data=$DB::table("user")->select();//使用sql语句$data=$DB::query("select * from user");

2.方法配置

1.使用数组

//Db类中的connect方法:数据库初始化 并取得数据库类实例        $DB=Db::connect([    // 数据库类型
    'type'            => 'mysql',    // 服务器地址
    'hostname'        => '127.0.0.1',    // 数据库名
    'database'        => 'edu',    // 用户名
    'username'        => 'root',    // 密码
    'password'        => '',    // 端口
    'hostport'        => '3306',
]);

2.使用字符串

//Db类中的connect方法:数据库初始化 并取得数据库类实例$DB=Db::connect("mysql://root:@127.0.0.1:3306/edu#utf8");

3.如何使用

$data=$DB->table('user')->select();

3.模型类定义

1.创建数据模型

  • a.命令行创建

  • b.手动创建
    1.打开数据模型目录(项目\application\index\model)
    2.在目录文件下新建文件User.php
    3.在文件中书写代码

2.如何设置

 'mysql',            // 服务器地址
            'hostname'        => '127.0.0.1',            // 数据库名
            'database'        => 'edu',            // 用户名
            'username'        => 'root',            // 密码
            'password'        => '',            // 端口
            'hostport'        => '3306',
        ];        //使用字符串
        protected $connection="mysql://root:@127.0.0.1:3306/edu#utf8";
    }?>

3.如何控制器中使用

// 使用模型定义连接public function data2(){
    echo "使用模型连接数据库";    $user=new \app\index\model\User();
    dump($user::all());
}

三、查询数据

1.tp方法

// 实例化系统数据库类$DB=new Db;// 查询数据$data=$DB::table("user")->select();

2.使用sql语句

//使用sql语句$data=$DB::query("select * from user");

四、数据库的基本使用

支持query(查询操作)和execute(写入操作)

0.获取指定sql语句

// 获取执行的sql语句echo Db::getLastSql();

1.查询

$data=Db::query("select * from user");
$data=Db::query("select * from user where id >=? and id<=?",[5,8]);

2.增加

$data=Db::execute("insert into user value(null,'user1','123','18')");
$data=Db::execute("insert into user value(null,?,?,?)",['user2','123','20']");
$data=Db::execute("insert into user value(null,:name,:pass,:age)",['name'=>'user3','pass'=>'123','age'=>'20']);

3.删除

$data=Db::execute("delete from user where id=10");
$data=Db::execute("delete from user where id>?",[15]);
$data=Db::execute("delete from user where id>:id",['id'=>10]);

4.修改

$data=Db::execute("update user set age='20' where id=?",[15]);

五、TP数据处理

1.查询操作

1.table方法查询数据
    // 查询所有数据
    $data=Db::table("user")->select();
    // 查询一条数据
    $data=Db::table("user")->find();
2.name方法查询数据
    //name方法会自动添加上配置文件中的表前缀,与配置文件有关
    $data=Db::name("user")->select();
    $data=Db::name("user")->find();
3.助手函数
    $data=db("user")->select();
    $data=db("user")->find();
4.where条件匹配
    $data=Db::table("user")->where("id",">",5)->select();
    $data=Db::table("user")->where("id","<",11)->where("id",">",8)->select();
    $data=Db::table("user")->where("name","like","%tian%")->select();
    $data=Db::table("user")->where("name","wanlisha")->where("pass","wanlisha")->select();
5.whereor条件查询
    $data=Db::table("user")->where("id","<=",'21')->whereOr("id","<=",5)->select();
    $data=Db::table("user")->where("name",'like',"%tian%")->whereOr("name",'like','%wanli%')->select();
    $data=Db::table("user")->where("name|pass",'like',"%tian%")->select();//
6.limit截取数据
    $data=Db::table("user")->limit(2)->select();
    $data=Db::table("user")->limit(0,2)->select();
7.order实现排序
    $data=Db::table("user")->order('id')->select();
    $data=Db::table("user")->order("id","desc")->select();
8.field 设置查询字段
    //设置查询字段
        $data=Db::table("user")->field('name,pass')->select();
        $data=Db::table("user")->field(['name','pass'])->select();
    // 给name起别名
        $data=Db::table("user")->field('name uname,pass')->select();
        $data=Db::table("user")->field(['name'=> 'uname','pass'])->select();
    // sql的系统函数
        $data=Db::table("user")->field("count(*) as tot")->select();
        $data=Db::table("user")->field(["count(*)"=>"tot"])->select();
    //排除字段
        $data=Db::table("user")->field("name,pass",true)->select();
        $data=Db::table("user")->field(["name","pass"],true)->select();
9.Page实现分页效果
    $data=Db::table("user")->page(3,5)->select();
    $data=Db::table("user")->page("3,5")->select();
10.分组聚合
    $data=Db::table("user")->field("pass,count(*) tot")->group("pass")->select();
11.having过滤
    // 只能结合分组使用
        $data=Db::table("user")->field("pass,count(*) tot")->having("tot >=4")->group("pass")->select();
12.多表查询
    // 内敛实现数据库连接
        $data=Db::query("select product.*,fenlei.name tname from fenlei,product where product.cid=fenlei.id");
        $data=Db::table("product")->field("product.*,fenlei.name tname")->join("fenlei","product.cid=fenlei.id")->select();
        // 右链接
        $data=Db::table("product")->field("product.*,fenlei.name tname")->join("fenlei","product.cid=fenlei.id",'right')->select();
        // 左链接
        $data=Db::table("product")->field("product.*,fenlei.name tname")->join("fenlei","product.cid=fenlei.id",'left')->select();
13.别名使用-给表起别名
    $data=Db::table("product")->alias('p')->field("p.*,f.name fname")->join("fenlei f","p.cid=f.id",'left')->select();
14.union集合
    $data=Db::field("name")->table("user")->union("select name from product")->select();
15.参数绑定bind为了防止sql注入
    //自动轻微防止sql注入
    $data=Db::table("user")->where("id",$id)->delete(); 
    //不防注入 建议不要使用原生的sql语句
    $data=Db::execute("delete from user where id=$id");
    //防注入
    $data=Db::table("user")->where("id",":id")->bind(['id'=>[$id,\PDO::PARAM_INT]])->delete();
16.统计数据
        $data=Db::table("user")->max("age");
        $data=Db::table("user")->min("age");
        $data=Db::table("user")->avg("age");
        $data=Db::table("user")->sum("age");
        $data=Db::table("user")->count();
17.视图查询(多表查询)
        $data=Db::view("goods","id,name,price")->view("type","name","type.id=goods.cid")->select();
        // 左连接
        $data=Db::view("goods","id,name,price")->view("type","name","type.id=goods.cid","right")->select();
        // 右连接
        $data=Db::view("goods","id,name,price")->view("type","name","type.id=goods.cid","left")->select();

2.插入操作

1.插入单条数据
    // 数组中的字段名必须和数据库中字段名一致
        $data=[
            'name'=>'张三',
            'pass'=>'123',
            'age'=>18
        ];
        // 返回值:影响行数
        $code=Db::table("user")->insert($data);
        $code=db("user")->insert($data);
2.插入多条数据
    $data=[
        [
            'name'=>'张三1',
            'pass'=>'123',
            'age'=>18
        ],
        [
            'name'=>'张三2',
            'pass'=>'123',
            'age'=>18
        ]
    ];
    //返回值:影响行数 
    $code=Db::table("user")->insertAll($data);
    $code=db("user")->insertAll($data);
3.获取最后一次插入的id
    $data=[
        'name'=>'张三1',
        'pass'=>'123',
        'age'=>18
    ];
    $code=Db::table("user")->insertGetId($data); 
    $code=db("user")->insertGetId($data);

3.更新数据

1.修改数据
    $code=Db::table("user")->where("id",">",5)->update(["age"=>111,"pass"=>'111']);
    $code=Db::table("user")->update(["id"=>5,"age"=>60]);
    code=Db::table("user")->where("id",5)->setField("age",111);
2.设置自增
    $code=Db::table("user")->where("id",6)->setInc("age");
3.设置自减
    $code=Db::table("user")->where("id",7)->setDec("age");
    $code=Db::table("user")->where("id",5)->setDec("age",3);

4.删除数据

1.删除一条数据
    $code=Db::table("user")->where("id",6)->delete();
    $code=Db::table("user")->delete(7);
2.删除多条数据
    $code=Db::table("user")->where("id in(1,2)")->delete();
    $code=Db::table("user")->delete([2,3]);
3.删除区间数据
    $code=Db::table("user")->where("id>0 and id<5")->delete();

六、事务机制

1.mysql事务

要求数据的引擎必须是InnoDB
重点:对要操作的数据表执行语句:ALTER TABLE user ENGINE=INNODB;

2.使用

1. 自动控制事务

Db::transaction(function(){    // 删除一条数据    Db::table("user")->delete(11);    Db::table("user")->deletes(40);});

2. 手动控制事务

// 手动控制事务
    // 开启事务
    Db::startTrans();    try{        // 删除数据
        $a=Db::table("user")->delete(11);        // 判断是否删除成功
        if(!$a){            throw new  \Exception("删除11没有成功");
        }        // 删除不存在的数据
        $b=Db::table("user")->delete(12);        if(!$b){            throw new  \Exception("删除12没有成功");
        }        // 执行提交操作
        Db::commit();`这里写代码片`        echo "成功";
    }catch(\Exception $e){        // 回滚事务
        echo "失败";
        Db::rollback();
        dump($e->getmessage());
    }

    // 开启事务
    Db::startTrans();    // 删除数据
    $a=Db::table("user")->delete(1);    $b=Db::table("user")->delete(2);    // 判断条件
    if($a && $b){        // 提交事务
        Db::commit();
    }else{
        Db::rollback();
    }

一、支持数据库的类型

Mysql,SqlServer,pgSQL,Sqlite等数据库的支持

二、如何连接数据库

1.配置文件定义

a.配置文件目录
项目\application\database.php
b.如何配置

return [    // 数据库类型
    'type'            => 'mysql',    // 服务器地址
    'hostname'        => '127.0.0.1',    // 数据库名
    'database'        => '',    // 用户名
    'username'        => 'root',    // 密码
    'password'        => '',    // 端口
    'hostport'        => '3306',
];

c.如何使用

// 实例化系统数据库类$DB=new Db;// 查询数据$data=$DB::table("user")->select();//使用sql语句$data=$DB::query("select * from user");

2.方法配置

1.使用数组

//Db类中的connect方法:数据库初始化 并取得数据库类实例        $DB=Db::connect([    // 数据库类型
    'type'            => 'mysql',    // 服务器地址
    'hostname'        => '127.0.0.1',    // 数据库名
    'database'        => 'edu',    // 用户名
    'username'        => 'root',    // 密码
    'password'        => '',    // 端口
    'hostport'        => '3306',
]);

2.使用字符串

//Db类中的connect方法:数据库初始化 并取得数据库类实例$DB=Db::connect("mysql://root:@127.0.0.1:3306/edu#utf8");

3.如何使用

$data=$DB->table('user')->select();

3.模型类定义

1.创建数据模型

  • a.命令行创建

  • b.手动创建
    1.打开数据模型目录(项目\application\index\model)
    2.在目录文件下新建文件User.php
    3.在文件中书写代码

2.如何设置

 'mysql',            // 服务器地址
            'hostname'        => '127.0.0.1',            // 数据库名
            'database'        => 'edu',            // 用户名
            'username'        => 'root',            // 密码
            'password'        => '',            // 端口
            'hostport'        => '3306',
        ];        //使用字符串
        protected $connection="mysql://root:@127.0.0.1:3306/edu#utf8";
    }?>

3.如何控制器中使用

// 使用模型定义连接public function data2(){
    echo "使用模型连接数据库";    $user=new \app\index\model\User();
    dump($user::all());
}

三、查询数据

1.tp方法

// 实例化系统数据库类$DB=new Db;// 查询数据$data=$DB::table("user")->select();

2.使用sql语句

//使用sql语句$data=$DB::query("select * from user");

四、数据库的基本使用

支持query(查询操作)和execute(写入操作)

0.获取指定sql语句

// 获取执行的sql语句echo Db::getLastSql();

1.查询

$data=Db::query("select * from user");
$data=Db::query("select * from user where id >=? and id<=?",[5,8]);

2.增加

$data=Db::execute("insert into user value(null,'user1','123','18')");
$data=Db::execute("insert into user value(null,?,?,?)",['user2','123','20']");
$data=Db::execute("insert into user value(null,:name,:pass,:age)",['name'=>'user3','pass'=>'123','age'=>'20']);

3.删除

$data=Db::execute("delete from user where id=10");
$data=Db::execute("delete from user where id>?",[15]);
$data=Db::execute("delete from user where id>:id",['id'=>10]);

4.修改

$data=Db::execute("update user set age='20' where id=?",[15]);

五、TP数据处理

1.查询操作

1.table方法查询数据
    // 查询所有数据
    $data=Db::table("user")->select();
    // 查询一条数据
    $data=Db::table("user")->find();
2.name方法查询数据
    //name方法会自动添加上配置文件中的表前缀,与配置文件有关
    $data=Db::name("user")->select();
    $data=Db::name("user")->find();
3.助手函数
    $data=db("user")->select();
    $data=db("user")->find();
4.where条件匹配
    $data=Db::table("user")->where("id",">",5)->select();
    $data=Db::table("user")->where("id","<",11)->where("id",">",8)->select();
    $data=Db::table("user")->where("name","like","%tian%")->select();
    $data=Db::table("user")->where("name","wanlisha")->where("pass","wanlisha")->select();
5.whereor条件查询
    $data=Db::table("user")->where("id","<=",'21')->whereOr("id","<=",5)->select();
    $data=Db::table("user")->where("name",'like',"%tian%")->whereOr("name",'like','%wanli%')->select();
    $data=Db::table("user")->where("name|pass",'like',"%tian%")->select();//
6.limit截取数据
    $data=Db::table("user")->limit(2)->select();
    $data=Db::table("user")->limit(0,2)->select();
7.order实现排序
    $data=Db::table("user")->order('id')->select();
    $data=Db::table("user")->order("id","desc")->select();
8.field 设置查询字段
    //设置查询字段
        $data=Db::table("user")->field('name,pass')->select();
        $data=Db::table("user")->field(['name','pass'])->select();
    // 给name起别名
        $data=Db::table("user")->field('name uname,pass')->select();
        $data=Db::table("user")->field(['name'=> 'uname','pass'])->select();
    // sql的系统函数
        $data=Db::table("user")->field("count(*) as tot")->select();
        $data=Db::table("user")->field(["count(*)"=>"tot"])->select();
    //排除字段
        $data=Db::table("user")->field("name,pass",true)->select();
        $data=Db::table("user")->field(["name","pass"],true)->select();
9.Page实现分页效果
    $data=Db::table("user")->page(3,5)->select();
    $data=Db::table("user")->page("3,5")->select();
10.分组聚合
    $data=Db::table("user")->field("pass,count(*) tot")->group("pass")->select();
11.having过滤
    // 只能结合分组使用
        $data=Db::table("user")->field("pass,count(*) tot")->having("tot >=4")->group("pass")->select();
12.多表查询
    // 内敛实现数据库连接
        $data=Db::query("select product.*,fenlei.name tname from fenlei,product where product.cid=fenlei.id");
        $data=Db::table("product")->field("product.*,fenlei.name tname")->join("fenlei","product.cid=fenlei.id")->select();
        // 右链接
        $data=Db::table("product")->field("product.*,fenlei.name tname")->join("fenlei","product.cid=fenlei.id",'right')->select();
        // 左链接
        $data=Db::table("product")->field("product.*,fenlei.name tname")->join("fenlei","product.cid=fenlei.id",'left')->select();
13.别名使用-给表起别名
    $data=Db::table("product")->alias('p')->field("p.*,f.name fname")->join("fenlei f","p.cid=f.id",'left')->select();
14.union集合
    $data=Db::field("name")->table("user")->union("select name from product")->select();
15.参数绑定bind为了防止sql注入
    //自动轻微防止sql注入
    $data=Db::table("user")->where("id",$id)->delete(); 
    //不防注入 建议不要使用原生的sql语句
    $data=Db::execute("delete from user where id=$id");
    //防注入
    $data=Db::table("user")->where("id",":id")->bind(['id'=>[$id,\PDO::PARAM_INT]])->delete();
16.统计数据
        $data=Db::table("user")->max("age");
        $data=Db::table("user")->min("age");
        $data=Db::table("user")->avg("age");
        $data=Db::table("user")->sum("age");
        $data=Db::table("user")->count();
17.视图查询(多表查询)
        $data=Db::view("goods","id,name,price")->view("type","name","type.id=goods.cid")->select();
        // 左连接
        $data=Db::view("goods","id,name,price")->view("type","name","type.id=goods.cid","right")->select();
        // 右连接
        $data=Db::view("goods","id,name,price")->view("type","name","type.id=goods.cid","left")->select();

2.插入操作

1.插入单条数据
    // 数组中的字段名必须和数据库中字段名一致
        $data=[
            'name'=>'张三',
            'pass'=>'123',
            'age'=>18
        ];
        // 返回值:影响行数
        $code=Db::table("user")->insert($data);
        $code=db("user")->insert($data);
2.插入多条数据
    $data=[
        [
            'name'=>'张三1',
            'pass'=>'123',
            'age'=>18
        ],
        [
            'name'=>'张三2',
            'pass'=>'123',
            'age'=>18
        ]
    ];
    //返回值:影响行数 
    $code=Db::table("user")->insertAll($data);
    $code=db("user")->insertAll($data);
3.获取最后一次插入的id
    $data=[
        'name'=>'张三1',
        'pass'=>'123',
        'age'=>18
    ];
    $code=Db::table("user")->insertGetId($data); 
    $code=db("user")->insertGetId($data);

3.更新数据

1.修改数据
    $code=Db::table("user")->where("id",">",5)->update(["age"=>111,"pass"=>'111']);
    $code=Db::table("user")->update(["id"=>5,"age"=>60]);
    code=Db::table("user")->where("id",5)->setField("age",111);
2.设置自增
    $code=Db::table("user")->where("id",6)->setInc("age");
3.设置自减
    $code=Db::table("user")->where("id",7)->setDec("age");
    $code=Db::table("user")->where("id",5)->setDec("age",3);

4.删除数据

1.删除一条数据
    $code=Db::table("user")->where("id",6)->delete();
    $code=Db::table("user")->delete(7);
2.删除多条数据
    $code=Db::table("user")->where("id in(1,2)")->delete();
    $code=Db::table("user")->delete([2,3]);
3.删除区间数据
    $code=Db::table("user")->where("id>0 and id<5")->delete();

六、事务机制

1.mysql事务

要求数据的引擎必须是InnoDB
重点:对要操作的数据表执行语句:ALTER TABLE user ENGINE=INNODB;

2.使用

1. 自动控制事务

Db::transaction(function(){    // 删除一条数据    Db::table("user")->delete(11);    Db::table("user")->deletes(40);});

2. 手动控制事务

// 手动控制事务
    // 开启事务
    Db::startTrans();    try{        // 删除数据
        $a=Db::table("user")->delete(11);        // 判断是否删除成功
        if(!$a){            throw new  \Exception("删除11没有成功");
        }        // 删除不存在的数据
        $b=Db::table("user")->delete(12);        if(!$b){            throw new  \Exception("删除12没有成功");
        }        // 执行提交操作
        Db::commit();`这里写代码片`        echo "成功";
    }catch(\Exception $e){        // 回滚事务
        echo "失败";
        Db::rollback();
        dump($e->getmessage());
    }    // 开启事务
    Db::startTrans();    // 删除数据
    $a=Db::table("user")->delete(1);    $b=Db::table("user")->delete(2);    // 判断条件
    if($a && $b){        // 提交事务
        Db::commit();
    }else{
        Db::rollback();
    }

本文讲解了关于thinkphp5.0数据库操作的案例,更多相关内容请关注php中文网。

相关推荐:

列举ThinkPHP5与ThinkPHP3的一些异同点

创建一个最简单的ThinkPhp项目工程

同徽B2C电子商务软件系统
同徽B2C电子商务软件系统

开发语言:java,支持数据库:Mysql 5,系统架构:J2EE,操作系统:linux/Windows1. 引言 32. 系统的结构 32.1 系统概述 33. 功能模块设计说明 43.1 商品管理 43.1.1 添加商品功能模块 53.1.2 商品列表功能模块 83.1.3 商品关联功能模块 93.

下载

关于ThinkPHP的增、删、改、查 的一些总结

立即学习PHP免费学习笔记(深入)”;

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1937

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1277

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1181

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1400

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

vlookup函数使用大全
vlookup函数使用大全

本专题整合了vlookup函数相关 教程,阅读专题下面的文章了解更多详细内容。

28

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

Excel 教程
Excel 教程

共162课时 | 10.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号