数据库链接配置
数据库操作
连接数据库
参考资料:TP6 连接数据库官方文档
1.单链接配置
修改 app\database.php 文件 由于配置项太多,仅拿官方例子展示
配置上每一项都有注释说明,需要注意的就是文件路径而已🤣🤣
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'thinkphp',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
],
],
];
2.多连接配置
篇幅太长就直接截图说明
值得一提的是,TP6 引入了 env 环境变量机制,并且环境变量机制优先于 database.php 配置
关于 evn ,我在之前的 部分配置与控制器 中有说明,找到开启开发调试模式,就能看到。
.env 代码 ↓
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = tp6
USERNAME = root
PASSWORD =
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn
注意:.env 文件里的设置,与 database.php 的文件呼应关系如下
如果是多连接配置
请保持两个文件内相呼应一致
即,.env 有几个配置,database.php 就有几个配置
.env 配置 同理于 database.php ,只需要复制相同部分,然后在 database.php 修改标识部分即可
database.php文件
.env 文件
在数据操作时,可以通过 connect() 方法指定需要使用的数据库连接配置
数据库操作
参考资料:TP6 SQL调试官方文档
另,可以查询 app/vendor/topthink/framework/src/think/db/BaseQuery.php 文件,开启新世界
1.增
save() 单条新增,成功返回新增条数
insert() 单条新增,成功返回新增条数
insertAll() 多条新增,成功返回新增条数
insertGetId() 单条新增,成功返回新增数据自增ID
参考资料:TP6 添加数据官方文档
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
// 单条数据插入,save() insert() 两种方法等同效果。
// 使用 save() 新增数据
// $data = ['nickname' => 'save','email' => '123@snail.com'];
// $ins = Db::name('tp')->save($data);
// 使用insert()新增数据
// $data = ['nickname' => 'insert','email' => '123@snail.com'];
// $ins = Db::name('tp')->insert($data);
//
// 多条数据插入 insertAll()
// 数据组合为二维数组
// $data =
// [
// ['nickname' => 'insertAll1','email' => '123@snail.com'],
// ['nickname' => 'insertAll2','email' => '123@snail.com']
// ];
//单条数据插入,但是返回插入数据自增ID。
$data = ['nickname' => 'insertGetId','email' => '123@snail.com'];
$ins = Db::name('tp')->insertGetId($data);
if($ins){
return "插入成功";
}else{
return "插入失败";
}
}
}
结果图 ↓
2.查
find() 单条查询,成功返回一维数组
select() 多条查询,成功返回二维数组
value() 查询某个字段的值,成功返回字符串
column() 查询某一列的值,成功返回二维数组
参考资料:TP6 查询数据官方文档
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
// 查询ID为5的单条数据,返回一维数组
// $data = Db::name("tp")->find("5");
// 查询数据库内所有数据,返回二维数组
// $data = Db::name("tp")->select();
// 查询单条某个字段的值,返回字符串
// $data = Db::name("tp")->where("id","5")->value("nickname");
// 查询多条数据,返回二维数组
$data = Db::name("tp")->where("id",">","5")->column("*","id");
dump($data);
}
}
3.改
save() 单条修改,成功返回条数
update() 单/多条修改,成功返回条数
inc() 自增
dec() 自减
参考资料:TP6 更新数据官方文档
- save() 使用详解
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
//配置save() 修改数据,需要指定包含主键 id 才会修改数据,否则将会新增数据
$data = ["id"=>"7","nickname" => "saveUp"];
//打印修改前数据
echo "修改前";
dump(Db::name("tp")->find("7"));
//修改数据
Db::name("tp")->save($data);
//打印修改后数据
echo "修改后";
dump(Db::name("tp")->find("7"));
}
}
图↓
2. update() 详解
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
//组合数据形式,分别是update()使用,以及data()使用
$updateUp = ["nickname" => 'updateUp'];
$dataUp = ["nickname" => 'dataUp'];
//打印修改前数据
echo "打印修改前数据";
dump(Db::name("tp")->find(7));
//使用data()传值方式修改
Db::name("tp")->where("id","7")->data($dataUp)->update();
//打印data()传值修改后数据
echo "打印data()传值修改后数据";
dump(Db::name("tp")->find(7));
//同时使用data() 和 update()传值方式,update() 法优先级于 data() 传值
Db::name("tp")->where("id","7")->data($dataUp)->update($updateUp);
//打印update()传值修改后数据
echo "打印update()传值修改后数据,如果update()不优先级,数据应该无变化";
dump(Db::name("tp")->find(7));
}
}
图 ↓
- inc() dec() 详解
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
echo "将id为1的email自增一次 +2<br>";
echo "自增前";
dump(Db::name("tp")->find(1));
Db::name("tp")->where("id","1")->inc("email",2)->update();
echo "自增后";
dump(Db::name("tp")->find(1));
echo "将id为1的email自减一次 -1<br>";
Db::name("tp")->where("id","1")->dec("email",1)->update();
echo "自减后";
dump(Db::name("tp")->find(1));
}
}
图 ↓
4.删
delete() 影响数据的条数,没有删除返回 0
参考资料:TP6 删除数据官方文档
注意:慎用。不存在删库跑路说法
代码就免了🤣🤣🤣
一切数据均有其存在的价值
5.调试
fetchSql() 直接返回当前查询构造器组合语句,需与select() 配合使用
buildSql() 把当前查询构造器组合语句作为子查询返回,两边带有 ( 查询语句 ) ,不需要配合select()
这两种方法,均不会执行SQL语句
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
$where = [
["nickname","=","Snail"],
["nickname","=","Cry"]
];
dump(Db::name("tp")->whereOr($where)->buildSql());
dump(Db::name("tp")->whereOr($where)->fetchSql()->select());
}
}
图 ↓