官方说明: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));
// 字段必须用 ` 而不能用引号
}
漠漠睡