连接与查询构造器
数据库操作运行流程图.png
1.数据库操作运行流程图
* ThinkPHP5的数据库操作对底层进行优化设计,对各种操作进行高级封装,
既可以直接使用连接器进行高效的原生查询,也可以使用封装好的查询构造器进行
只管便捷的查询。
数据库连接配置
1.配置方法:
* 静态连接:应用/模块中的数据库配置文件database.php
* 动态连接:入口类Db.php中的connect(参数[数组或字符串])方法
* 静态配置重要参数
-> debug True 数据库调试模式
* 动态配置连接字符串
-> mysql://root:1234@localhost:3306/thinkphp#utf8
-> 数据库://用户名:密码@数据库地址:数据库端口/数据库名#字符集
* 动态配置数组方式
eg: public function demo()
{
$config = [
'type'=>'mysql',
'hostname'=>'localhost',
'username'=>'root',
'password'=>'root',
'database'=>'tp5',
];
//1.获取数据库的连接实例/对象
$link = Db::connect($config);
//2.用连接实例调用查询类的查询方法
$res = $link->table('staff')->select();
//3.输出查询结果
dump($res);
//Db::table('staff')->select();
}
2.数据库的第一步就是数据库的链接,TP5提供了强大灵活的连接方式,
特别是惰性连接支持,极大的提高了连接效率(db()助手函数不支持),
使用户的关注重点放在业务逻辑上,不必担心连接问题。
数据库原生查询
1.原生查询的实现
* Connection类
->query(sql语句字符串,[参数绑定]):读操作 select
->execute(sql语句字符串,[参数绑定]):写操作 insert、update、delete
2.thinkphp > library > think > db > Connection.php
* 查询操作:
->普通操作
eg: $sql = "select * from staff salary > 4000";
$result = Db::query($sql);
dump($result);
->参数绑定查询,可以防止sql注入
eg: $sql = "select * from staff where salary > ?";
$result = Db::query($sql,[4000]);
dump($result);
->命名占位符绑定(推荐使用)
eg: $sql = "select * from staff where salary > :salary";
$result = Db::query($sql,['salary'=>4000]);
dump($result);
* 其他操作
-> 更新操作
eg: $sql = "update staff set salary = salary+1000 where id=:id";
$res = Db::execute($sql,['id'=>1004]);
dump($res);
->插入操作
eg: $sql = "insert into staff (name,sex,age) values(:name,:sex,:age)";
$res = Db::execute($sql,['name'=>'thinkphp5','name'=>'1','age'=>10]);
dump($res);
->删除操作
eg: $sql = "delete from staff where id=:id";
$res = Db::execute($sq,['id'=>10]);
dump($res);
* Connection类实例通过入口类Db静态自动调用,不用显示写出
* 利用查询构造器进行增删改查操作,最终仍是调用连接类Connection对应方法完成。
查询构造器
1.查询构造器的原理: