### 連接數據庫
* 全局配置
在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 方法返回的都是數組,區別在于后者是二維數組。*