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

一、支持数据库的类型

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

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

2.如何设置


    // 声明命名空间(位置)
    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();
    }

你可能感兴趣的:(thinkphp5,学习笔记)