ThinkPHP5.0框架開發--第7章 TP5.0數據庫操做

ThinkPHP5.0框架開發--第7章 TP5.0數據庫操做

 

第7章 TP5.0數據庫操做php

=========================================================mysql

今日學習

 

一、TP5.0 支持數據庫類型

         Mysql、SqlServer、PgSQL、Sqlite等數據庫的支持。sql

 

二、如何鏈接數據庫

 

         一、配置文件定義數據庫

 

                   a、配置文件目錄數組

                            C:\AppServ\www\tp5\application\database.php服務器

 

                   b、如何配置app

                            return [框架

                                // 數據庫類型函數

                                'type'            => 'mysql',學習

                                // 服務器地址

                                'hostname'        => '127.0.0.1',

                                // 數據庫名

                                'database'        => 'yzmedu',

                                // 用戶名

                                'username'        => 'root',

                                // 密碼

                                'password'        => '123456789',

                                // 端口

                                'hostport'        => '3306',

                            ];

 

                   c、如何使用

 

                            // 實例化系統數據庫類

 

                            $DB=new Db;

 

                            // 查詢數據

 

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

 

                            // 使用sql語句

 

                            $data=$DB::query("select * from user");

 

         二、方法配置

 

                   一、使用數組

 

                            $Db=Db::connect([

                                               // 數據庫類型

                                               'type'            => 'mysql',

                                               // 服務器地址

                                               'hostname'        => '127.0.0.1',

                                               // 數據庫名

                                               'database'        => 'yzmedu2',

                                               // 用戶名

                                               'username'        => 'root',

                                               // 密碼

                                               'password'        => '123456789',

                                               // 端口

                                               'hostport'        => '3306',

 

                                     ]);

 

                   二、使用字符串

                            $Db=Db::connect("mysql://root:123456789@127.0.0.1:3306/yzmedu#utf8");

                            // 數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名#字符集

 

 

                   三、如何使用

 

                            $data=$Db->table("user")->select();

 

         三、模型類定義

 

                   一、建立數據模型

 

                            a、命令行建立

 

                                     一、切換到項目目錄

 

                                     二、執行命令

                                               php think make:model app\index\model\User

 

                            b、手動建立

 

                                     一、打開數據模型目錄

 

                                               C:\AppServ\www\tp5\application\index\model

 

                                     二、在目錄下新建 文件 User.php

 

 

                                     三、在文件中書寫代碼

 

                                               namespace app\index\model;

 

                                               use think\Model;

 

                                               class User extends Model

                                               {

                                                   //

                                               }

 

                   二、如何設置

 

                            class User extends Model

                            {

                                // 使用數組配置連接數據庫

 

                                protected $connection=[

 

                                         // 數據庫類型

                                         'type'            => 'mysql',

                                         // 服務器地址

                                         'hostname'        => '127.0.0.1',

                                         // 數據庫名

                                         'database'        => 'yzmedu',

                                         // 用戶名

                                         'username'        => 'root',

                                         // 密碼

                                         'password'        => '123456789',

                                         // 端口

                                         'hostport'        => '3306',

 

                                ];

 

                                // 使用字符串配置連接數據庫

 

                                protected $connection="mysql://root:123456789@127.0.0.1:3306/yzmedu#utf8";

 

                            }

 

                   三、如何控制器中使用

 

                            $user=new \app\index\model\User();

 

                            // 查詢全部的數據

                            dump($user::all());

 

 

三、查詢數據

         一、tp方法

 

                   // 實例化系統數據庫類

 

                   $DB=new Db;

 

                   // 查詢數據

 

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

 

         二、使用sql語句

 

                   // 實例化系統數據庫類

 

                   $DB=new Db;

 

                   // 使用sql語句

 

                   $data=$DB::query("select * from user");

 

四、數據庫的基本使用

        

         一、增長

                   # 返回值 影響行數

                   $data=Db::execute("insert into user value(null,'user1','123','18')");

                   $data=Db::execute("insert into user value(null,?,?,?)",['user2','456','20']);

                   $data=Db::execute("insert into user value(null,:name,:pass,:age)",['name'=>"user3","pass"=>'678','age'=>25]);

 

         二、修改

                   #返回值 影響行數

                   $data=Db::execute("update user set age='20' where id=9");

 

         三、刪除

                   #返回值 影響行數

                   $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]);

 

         四、查看

 

                   $data=Db::query("select * from user");

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

 

         五、獲取指定sql語句

 

                   Db::getLastSql();

 

 

         六、用戶模塊

 

                   一、命令行 找到項目目錄 新建控制器

                            php think make:controller app\index\controller\Users

 

                   二、寫資源路由

 

                            [詳見 代碼]

 

 

五、TP數據庫處理

        

         一、查詢操做

 

                   一、table方法查詢數據

 

                            // 查詢全部數據

                            // SELECT * FROM `user`

                            $data=Db::table("user")->select();

 

                            // 查詢一條數據

                            // SELECT * FROM `user` LIMIT 1

                            $data=Db::table("user")->find();

 

                   二、name方法查詢數據

                            // 與配置文件有關

                            // name 會自動添加配置文件中的表前綴

                            $data=Db::name("user")->select();

                            $data=Db::name("user")->find();

 

                   三、助手函數

 

                            # SELECT * FROM `user`

                            $data=db("user")->select();

 

                            # SELECT * FROM `user` LIMIT 1

                            $data=db("user")->find();

 

                   四、where條件匹配

 

                            // SELECT * FROM `user` WHERE `id` > 25

                            $data=Db::table("user")->where("id",">",25)->select();

 

                            // SELECT * FROM `user` WHERE ( `id` > 25 AND `id` < 28 )

                            $data=Db::table("user")->where("id",">",25)->where("id","<",28)->select();

 

                            // SELECT * FROM `user` WHERE `name` LIKE '%user1%'

                            $data=Db::table("user")->where("name","like","%user1%")->select();

 

                            // SELECT * FROM `user` WHERE `name` = 'user3' AND `pass` = 'qwe'

                            $data=Db::table("user")->where("name","user3")->where("pass",'qwe')->select();

 

                            // SELECT * FROM `user` WHERE ( id > 25 and id <28 )

                            $data=Db::table("user")->where("id > 25 and id <28")->select();

 

                            // SELECT * FROM `user` WHERE `id` > 25 AND `name` = 'user10'

                            $data=Db::table("user")->where(["id"=>[">",25],"name"=>'user10'])->select();

 

                            // SELECT * FROM `user` WHERE ( `id` > 25 AND `id` < 28 )

                            $data=Db::table("user")->where(["id"=>[">",25]])->where(['id'=>["<",28]])->select();

 

                   五、whereOr 或者匹配

 

                            // SELECT * FROM `user` WHERE `id` <= 23 OR `id` >= 28

                            $data=Db::table("user")->where("id","<=",23)->whereOr("id",">=",28)->select();

                           

                            // SELECT * FROM `user` WHERE `name` LIKE '%user1%' OR `name` LIKE '%user2%'

                            $data=Db::table("user")->where("name","like","%user1%")->whereOr("name","like","%user2%")->select();

 

                   六、limit 截取數據

 

                            // SELECT * FROM `user` LIMIT 5

                            $data=Db::table("user")->limit(5)->select();

 

                            // SELECT * FROM `user` LIMIT 5,5

                            $data=Db::table("user")->limit(5,5)->select();

 

                   七、Order 排序

                            // SELECT * FROM `user` ORDER BY `id`

                            $data=Db::table("user")->order("id")->select();

 

                            // SELECT * FROM `user` ORDER BY `id` desc

                            $data=Db::table("user")->order("id","desc")->select();

 

                   八、field 設置查詢字段

 

                            // 設置查詢字段

                            // SELECT `name`,`pass` FROM `user`

                            $data=Db::table("user")->field("name,pass")->select();

                            $data=Db::table("user")->field(['name','pass'])->select();

 

                            // 起別名

                            // SELECT name uname,`pass` FROM `user`

                            $data=Db::table("user")->field("name uname,pass")->select();

                            $data=Db::table("user")->field(['name'=>"uname",'pass'])->select();

 

                            // sql 的系統函數

                            // SELECT count(*) as tot FROM `user`

                            $data=Db::table("user")->field("count(*) as tot")->select();

                            $data=Db::table("user")->field(['count(*)'=>"tot"])->select();

 

                            // 排除字段

                            // SELECT `id`,`age` FROM `user`

                            $data=Db::table("user")->field("name,pass",true)->select();

                            $data=Db::table("user")->field(["name",'pass'],true)->select();

 

                   九、Page 實現分頁效果

 

                            // SELECT * FROM `user` LIMIT 5,5

                            $data=Db::table("user")->page("1,5")->select();

 

                   十、Group分組聚合

 

                            // SELECT `pass`,count(*) tot FROM `user` GROUP BY pass

 

                            $data=Db::table("user")->field("pass,count(*) tot")->group("pass")->select();

 

                   十一、having 過濾

                            // 只能結合分組使用

                            // SELECT `pass`,count(*) tot FROM `user` GROUP BY pass HAVING tot >=2

 

                            $data=Db::table("user")->field("pass,count(*) tot")->having("tot >=2")->group("pass")->select();

 

 

                   十二、多表查詢

 

                            // select goods.*,type.name tname from type,goods where goods.cid=type.id

                            $data=Db::query("select goods.*,type.name tname from type,goods where goods.cid=type.id");

                           

                            // 內聯實現數據庫連接

                            // SELECT `goods`.*,type.name tname FROM `goods` INNER JOIN `type` `type` ON `goods`.`cid`=`type`.`id`

                            $data=Db::table("goods")->field("goods.*,type.name tname")->join("type","goods.cid=type.id")->select();

                           

                            // 右連接

                            // SELECT `goods`.*,type.name tname FROM `goods` RIGHT JOIN `type` `type` ON `goods`.`cid`=`type`.`id`

                            $data=Db::table("goods")->field("goods.*,type.name tname")->join("type","goods.cid=type.id",'right')->select();

 

                            // 左連接

                            $data=Db::table("goods")->field("goods.*,type.name tname")->join("type","goods.cid=type.id",'left')->select();

 

                   1三、別名使用-給表起別名

 

                            // SELECT `g`.*,t.name tname FROM `goods` `g` LEFT JOIN `type` `t` ON `g`.`cid`=`t`.`id`

                            $data=Db::table("goods")->alias("g")->field("g.*,t.name tname")->join("type t","g.cid=t.id",'left')->select();

 

 

                   1四、union集合

 

                            // SELECT `name` FROM `user` UNION select name from goods

                            $data=Db::field("name")->table("user")->union("select name from goods")->select();

 

                   1五、參數綁定(bind) 爲了防止sql注入

                           

                            # DELETE FROM `user` WHERE `id` = 25

                            $id=input("id");

                            $data=Db::table("user")->where("id",":id")->bind(["id"=>[$id,\PDO::PARAM_INT]])->delete();

 

                   1六、數據統計

 

                            // SELECT MAX(age) AS tp_max FROM `user` LIMIT 1

                            $data=Db::table("user")->max("age");

 

                            // SELECT MIN(age) AS tp_min FROM `user` LIMIT 1

                            $data=Db::table("user")->min("age");

 

                            // SELECT AVG(age) AS tp_avg FROM `user` LIMIT 1

                            $data=Db::table("user")->avg("age");

 

                            // SELECT SUM(age) AS tp_sum FROM `user` LIMIT 1

                            $data=Db::table("user")->sum("age");

 

                            // SELECT COUNT(age) AS tp_count FROM `user` LIMIT 1

                            $data=Db::table("user")->count("age");

 

 

                   1七、視圖查詢

 

 

                            $data=Db::view("goods","id,name,price")

                                               ->view("type",'name tname',"type.id=goods.cid")

                                               ->select();

                            // SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `goods` `goods` INNER JOIN `type` `type` ON `type`.`id`=`goods`.`cid`

 

                            $data=Db::view("goods","id,name,price")

                                               ->view("type",'name tname',"type.id=goods.cid","left")

                                               ->select();

                            // SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `goods` `goods` LEFT JOIN `type` `type` ON `type`.`id`=`goods`.`cid`

 

 

         二、增長操做

 

 

                   一、插入單條數據

 

                            // 數組中的字段名 必須和數據庫中的字段名一致

 

                            $data=["name"=>"張三","pass"=>"123","age"=>18,];

 

                            $code=Db::table("user")->insert($data);

 

                            $code=db("user")->insert($data);

                            // INSERT INTO `user` (`name` , `pass` , `age`) VALUES ('張三' , '123' , 18)

                            // 返回值 影響行數

 

                   二、插入多條數據

 

                            $data=[

                                     ["name"=>"張三1","pass"=>"123","age"=>15,],

                                     ["name"=>"張三2","pass"=>"123","age"=>19,],

                            ];

 

                            $code=Db::table("user")->insertAll($data);

                            $code=db("user")->insertAll($data);

                            // 返回值 影響行數

 

                   三、獲取最後一次插入ID

 

                            $data=["name"=>"張三","pass"=>"123","age"=>18,];

                            $code=Db::table("user")->insertGetId($data);

                            $code=db("user")->inserGetId($data);

 

                            // 返回值最後插入的id

 

         三、更新數據

 

                   一、修改數據

 

                            $code=Db::table("user")->where("id",">",'60')->update(["pass"=>"qwe","age"=>2]);

                            // UPDATE `user` SET `pass`='qwe',`age`=2 WHERE `id` > 60

                            // 返回值 影響行數

 

                            $code=Db::table("user")->update(['age'=>52,"id"=>62]);

                            // UPDATE `user` SET `age`=52 WHERE `id` = 62

 

                            $code=Db::table("user")->where("id",73)->setField("pass",'abc');

                            // UPDATE `user` SET `pass`='abc' WHERE `id` = 73

 

                   二、設置自增

 

                            $code=Db::table("user")->where("id",63)->setInc("age");

                            // UPDATE `user` SET `age`=age+1 WHERE `id` = 63

 

                            $code=db("user")->where("id",66)->setInc("age");

                            // UPDATE `user` SET `age`=age+1 WHERE `id` = 66

 

                   三、設置自減

                            // UPDATE `user` SET `age`=age-1 WHERE `id` = 62

                            $code=Db::table("user")->where("id",62)->setDec("age");

 

                            $code=Db::table("user")->where("id",62)->setDec("age",3);

                            // UPDATE `user` SET `age`=age-3 WHERE `id` = 62

 

                            $code=db("user")->where("id",63)->setDec("age",3);

                            // UPDATE `user` SET `age`=age-3 WHERE `id` = 63

 

         四、刪除數據

 

                   一、刪除一條數據

 

                            $code=Db::table("user")->where("id","71")->delete();

 

                            $code=Db::table("user")->delete(70);

 

                   二、刪除多條數據

 

                            $code=Db::table("user")->where("id in(51,54,55)")->delete();

 

                            $code=Db::table("user")->delete([62,63,66]);

 

                   三、刪除區間數據

 

                            $code=Db::table("user")->where("id>40 and id<45")->delete();

                            // DELETE FROM `user` WHERE ( id>40 and id<45 )

 

 

 

六、事務機制

        

         一、事務

 

                   張三 銀行卡 1000, 李四 銀行卡 500, 張三給李四轉帳200

 

                   1) 銀行 先扣除 張三的200

 

                   2) 銀行 將200 給了李四

 

 

         二、mysql事務

 

                   mysql事務 要求 數據庫的引擎必須 InnoDB

 

 

         三、使用

 

                   一、自動控制事務

 

                            Db::transaction(function(){

 

                                     // 刪除一條數據

 

                                     Db::table("user")->delete(40);

 

                                     // 刪除數據

 

                                     Db::table("user")->deletes();

                            });

 

                   二、手動控制事務 (***)

 

                            // 開啓事務

 

                            Db::startTrans();

 

                            // 事務

 

                            try{

                                     // 刪除數據id 31

                                     $a=Db::table("user")->delete(31);

                                     // 判斷是否刪除成功

                                     if (!$a) {

                                               throw new \Exception("刪除id 31 數據沒有成功");

                                     }

                                     // 刪除不存在的數據 id 32

                                     $b=Db::table("user")->delete(32);

                                     // 判斷是否刪除成功

                                     if (!$b) {

                                               throw new \Exception("刪除id 32 數據沒有成功");

                                     }

                                     // 執行提交操做

                                     Db::commit();

                            }catch(\Exception $e){

                                     // 回滾事務

                                     Db::rollback();

                                     // 獲取提示信息

                                     dump($e->getMessage());

                            }

 

                   // ==================================================================

 

                            // 開啓事務

                            Db::startTrans();

 

                            // 刪除數據 33

                            $a=Db::table("user")->delete(33);

                            // 刪除數據 34

                            $b=Db::table("user")->delete(34);

 

                            // 判斷條件

                            if ($a && $b) {

                                     // 提交事務

                                     Db::commit();

                            }else{

                                     // 回滾事務

                                     Db::rollback();

                            }

相關文章
相關標籤/搜索