### 连接数据库
* 全局配置
在config目录下的database.php中配置。
* 动态配置
用think\\db\\Query.php中的connect()方法
```
Db::connect(\[
'type' => 'mysql',
'hostname' => 'localhost',
'database' => 'demo',
'username' => 'root',
'password' => '123456',
\])->table('student')->select()
```
* DSN连接
数据库类型://用户名:密码@数据库地址:端口号/数据库名称#字符集
```
Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8')
\->table('user')
\->find();
```
* 单独配置
在confi目录中创建一个index目录,它对应的是application下的controller中的Index控制器
* 数据库操作
查询构造器:需要注意的是如果设置了表前缀,在Db查询时用name,Db::name('表名'),反之Db::table('表名')。
将config目录下的app.php中的'app\_debug' => true,'app\_trace'=> true,打开,可以进行调试。
* Db是静态调用
**单条查询(find),返回一维数组**
> Db::table(表名)->where(条件)->find();
> where单个条件使用表达式,多个条件使用数组\['字段名', '=', '值'\],\['字段名', '>', '值'\]。
> field('id,name,add\_time')#指定字段,
> field(\['id'=>'编号','name'=>'名称'\])#给字段起别名,
> 如果是根据主键id来查询,where可以省略,直接将id的值放在find(5)中。
**多条查询(select),返回二维数组**
> 将find换成select。
**单条插入(insert),返回布尔类型**
$data = \['foo' => 'bar', 'bar' => 'foo'\];
Db::name('user')->insert($data);
如果是mysql数据库,支持replace写入,例如
$data = \['foo' => 'bar', 'bar' => 'foo'\];
Db::name('user')->insert($data, true); #多个参数true
**过滤数据插入**
Db::name('user')->data($data)insert();//不支持传入参数true
### 插入的同时返回主键ID
Db::name('user')->insertGetId($data);
### 多条插入(insertAll)返回添加成功的条数
```
$data =[
['foo' => 'bar', 'bar' => 'foo'\],
['foo' => 'bar1', 'bar' => 'foo1'\],
['foo' => 'bar2', 'bar' => 'foo2'\]
];
Db::name('user')->insertAll($data);
```
如果是mysql数据库,支持replace写入(用data()方法)。
### 更新(必须有条件)返回影响数据的条数,没修改任何数据返回 0
```
Db::name('user')
->where('id', 1)
->update(\['name' => 'thinkphp'\]);
```
如果数据中包含主键,可以直接使用:
Db::name('user')->update(\['name' => 'thinkphp','id'=>1\]);
### 删除(delete)返回影响数据的条数,没有删除返回 0
Db::table('think\_user')->delete(1);
Db::table('think\_user')->delete(\[1,2,3\]);
### 条件删除
Db::table('think\_user')->where('id',1)->delete();
Db::table('think\_user')->where('id','delete();
### 原生查询(query)如果数据非法或者查询错误则返回false,否则返回查询结果数据集(同select方法)
Db::query("select \* from think\_user where status=1");
### 原生增改删(execute)如果数据非法或者查询错误则返回false,否则返回影响的记录数
Db::execute("update think\_user set name='thinkphp' where status=1");
* 参数绑定,支持在原生查询的时候使用参数绑定,包括问号占位符或者命名占位符
```
Db::query("select \* from think\_user where id=? AND status=?", \[8, 1\]);
```
* 命名绑定
```
Db::execute("update think\_user set name=:name where status=:status", \['name' => 'thinkphp', 'status' => 1\]);
```
> *注:find 和 select 方法返回的都是数组,区别在于后者是二维数组。*