thinkphp5.0学习(七):数据库操作

来源:互联网 发布:什么是淘宝旺旺号啊 编辑:程序博客网 时间:2024/05/22 00:09

一、支持数据库的类型

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.在文件中书写代码

    <?php    // 声明命名空间(位置)    namespace app\index\model;    // 声明控制器    use think\Model;    class User extends Model    {    }?>

2.如何设置

<?php    // 声明命名空间(位置)    namespace app\index\model;    // 声明控制器    use think\Model;    class User extends Model    {        // 使用数组连接数据库        protected $connection=[            // 数据库类型            'type'            => '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();    }