官方说明:ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的D...
官方说明:
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。数据库抽象访问层基于PDO方式,目前内置包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。
如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
// 全局配置测试 public function D1(){ return Db::table('user')//查询user数据库 ->where('id=1')// id为1的数据 ->value('name');// 获取其name值 } // 动态配置 public function D2(){ return Db::connect([ 'type'=>'mysql', 'hostname'=>'127.0.0.1', 'database'=>'tp51', 'username'=>'root', 'password'=>'root', ]) ->table('user') ->where('ID=1') ->value('Password'); } // DSN 连接 public function D3(){ $dsn = 'mysql://root:root@127.0.0.1:3306/tp51#utf8'; return Db::connect($dsn) ->table('user') ->where('ID=1') ->value('Level'); } // 查询构造器 // 数据库的增删改查工作 // 单条查询 public function find(){ $res = Db::table('user')//选择数据表 ->where('ID','=',1)//查询表达式 ->find();//查询,返回一维数组 dump(is_null($res) ? false : $res); // [ SQL ] SELECT * FROM `user` WHERE `ID` = 1 LIMIT 1 $res = Db::table('user')//选择数据表 ->field('ID,Password,Alias')// 仅获取指定字段 ->where('ID','=',1)//查询表达式 ->find();//查询,返回一维数组 dump(is_null($res) ? false : $res); // [ SQL ] SELECT `ID`,`Password`,`Alias` FROM `user` WHERE `ID` = 1 LIMIT 1 $res = Db::table('user')//选择数据表 ->field('ID,Password,Alias')// 仅获取指定字段 // ->where('ID','=',1)//查询表达式 ->find(1);//使用主键查询,可以省略where dump(is_null($res) ? false : $res); // [ SQL ] SELECT `ID`,`Password`,`Alias` FROM `user` WHERE `ID` = 1 LIMIT 1 // $res = Db::table('user')//选择数据表 // ->field(['ID'=>'12','Password'=>'密码','Alias'=>'别名'])// 仅获取指定字段 // ->where('ID','=',1)//查询表达式 // ->find();//查询,返回一维数组 // dump(is_null($res) ? false : $res); // [ SQL ] SELECT `ID`,`Password`,`Alias` FROM `user` WHERE `ID` = 1 LIMIT 1 } // 多条查询 public function select(){ // 返回的是一个二位数组,如果没有数据,则返回空数组 $res = Db::table('user') ->where([ ['ID','>',10], ['ID','<',41], ]) ->select(); dump(empty($res) ? false : $res); // SELECT * FROM `user` WHERE `ID` > 0 AND `ID` < 4 [ RunTime:0.000414s ] } // 单条插入(新增) public function insert(){ $data = [ 'Name'=>'t1', 'Password'=>'22', ]; $res = Db::table('user')->insert($data); // [ SQL ] INSERT INTO `user` (`Name` , `Password`) VALUES ('t1' , '22') $res = Db::table('user')->insert($data,true); // 只有mysql可以传入true // [ SQL ] REPLACE INTO `user` (`Name` , `Password`) VALUES ('t1' , '22') // replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。 // 要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。 $res = Db::table('user')->data($data)->insert(); // 使用data方式对传入的参数进行过滤,这样会提高一定的安全性 $res = Db::table('user')->insertGetId($data); // insertGetId()同时执行两步,先执行插件,然后返回主键ID, // insertGetId()必须传入参数,也就是说,不支持前置data语法 // 成功返回1, dump($res); } // 多条插入 public function insertAll(){ $data = [ ['Name'=>'t2','Password'=>'2'], ['Name'=>'t3','Password'=>'2'], ]; return Db::table('user')->insertAll($data); return Db::table('user')->insertAll($data,true); return Db::table('user')->data($data)->insertAll(); // 返回插入的条数 // [ SQL ] INSERT INTO `user` (`Name` , `Password`) VALUES ( 't2','2' ) , ( 't3','2' ) } // 更新操作 public function update(){ // 必须有更新条件 return Db::table('user') ->where('ID','=','10') ->update(['Name'=>'tt1']);//不支持data写法 // 返回更新的条数 // [ SQL ] UPDATE `user` SET `Name` = 'tt1' WHERE `ID` = 10 } // 删除操作 public function delete(){ return Db::table('user')->where('id','=','10')->delete(); return Db::table('user')->delete('10'); } // 原生SQL // 一般用于特殊语句 // 原生查询 public function query(){ $sql = "SELECT * FROM user WHERE `Name`='test'"; //$sql = "UPDATE `user` SET `Name` = 'ttt1' WHERE `ID` = 10 "; //$sql = "SELECT * FROM `user` WHERE `ID` = 1 LIMIT 1 "; dump(DB::query($sql)); // 字段必须用 ` 而不能用引号 } // 原生写操作 public function execute(){ $sql = "UPDATE `user` SET `Name` = 'tt1' WHERE `ID` = 10 "; dump(DB::execute($sql)); // 字段必须用 ` 而不能用引号 }