一、數據庫配置
1、在應用目錄或者模塊目錄下面的database.php中添加下面的配置參數:
return [ // 數據庫類型 'type' => 'mysql', // 數據庫連接DSN配置 'dsn' => '', // 服務器地址 'hostname' => '127.0.0.1', // 數據庫名 'database' => 'thinkphp', // 數據庫用戶名 'username' => 'root', // 數據庫密碼 'password' => '', // 數據庫連接端口 'hostport' => '', // 數據庫連接參數 'params' => [], // 數據庫編碼默認采用utf8 'charset' => 'utf8', // 數據庫表前綴 'prefix' => 'think_', // 數據庫調試模式 'debug' => false, // 數據庫部署方式:0 集中式(單一服務器),1 分布式(主從服務器) 'deploy' => 0, // 數據庫讀寫是否分離 主從式有效 'rw_separate' => false, // 讀寫分離后 主服務器數量 'master_num' => 1, // 指定從服務器序號 'slave_no' => '', // 是否嚴格檢查字段是否存在 'fields_strict' => true, ];
2、方法中配置(字符串配置、數組配置):
2.1 字符串配置
Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8'); 數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名#字符集
2.2 數組配置
Db::connect([
//數據庫類型
'type' => 'mysql',
//服務器地址
'hostname' => '127.0.0.1',
//數據庫名
'database' => 'thinkphp',
//數據庫名
'username' => 'root',
//數據庫密碼
'password' => 'root',
//數據庫表前綴
'prefix' => 'think_',
]);
二、基本查詢
1、query(查詢操作)execute(寫入操作) 原生態SQL語句 增刪改查
Db::execute("insert into t_test(username,password) values('小明','111111')"); Db::execute("update t_test set username ='55' where id = '10'"); Db::query('select * from t_test where id = 5'); Db::execute('delete from t_test where id = 6');
2、 參數綁定 命名占位符綁定
支持參數綁定:
Db::query('select * from think_user where id=?',[8]); Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']); 支持占位符綁定: Db::query('select * from think_user where id=:id',['id'=>8]); Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);
三、查詢構造器
【在thinkPHP5.0.9之后,db('表名') 助手函數默認不再強制重新連接,這樣大大的縮減了每次使用時重連數據庫的操作時間,更加方便】
【在數據庫配置中配置了表前綴的情況下(假定表前綴是think_ ,表名為think_user),Db::table('think_user') 、Db::name('user') 跟 db('user')是一樣的】
【在數據庫配置中沒有配置表前綴的情況下(假定表名為think_user),Db::table('think_user')、Db::name('think_user') 跟 db('user') 是一樣的】
1、查詢數據:
(1)查詢一個數據使用:
// table方法必須指定完整的數據表名 Db::table('think_user')->where('id',1)->find(); //find 方法查詢結果不存在,返回 null,存在則返回一條一維數組
(2)查詢數據集
Db::table('think_user')->where('status',1)->select(); select 方法查詢結果不存在,返回空數組,存在則返回二維數組集合
如果設置了數據表前綴參數的話,可以使用
Db::name('user')->where('id',1)->find(); Db::name('user')->where('status',1)->select();
如果你的數據表沒有使用表前綴功能,那么name和table方法的一樣的效果。
(3)助手函數
系統提供了一個db助手函數,可以更方便的查詢:
db('user')->where('id',1)->find(); db('user')->where('status',1)->select();
2、添加數據:
(1)添加一條數據
$data = ['foo' => 'bar', 'bar' => 'foo']; Db::table('think_user')->insert($data);
//insert 方法添加成功,返回值是影響記錄的行數
Db::table('think_user')->insertGetId($data);
//insertGetId 方法添加成功,返回插入數據的自增id值
(2)添加多條數據
$data = [
['foo' => 'bar', 'bar' => 'foo'], ['foo' => 'bar1', 'bar' => 'foo1'], ['foo' => 'bar2', 'bar' => 'foo2'] ]; Db::name('user')->insertAll($data); //insertAll 方法添加數據成功,返回影響記錄的行數
(3)助手函數
// 添加單條數據 db('user')->insert($data); // 添加多條數據 db('user')->insertAll($list);
3、更新數據:
【更新時必須帶有條件,否則會報錯,如果想全部更新,則可以在where條件中寫上恆等式“1=1”】
【更新方法的返回值,都是影響記錄的行數,如果更新前后保持不變,則返回0,更新失敗返回的則是false】
(1)更新數據表中的數據
Db::table('think_user') ->where('id', 1) ->update(['name' => 'thinkphp']);
(2)助手函數
// 更新數據表中的數據 db('user')->where('id',1)->update(['name' => 'thinkphp']); // 更新某個字段的值 db('user')->where('id',1)->setField('name','thinkphp');
//setField 方法,僅用於更新某一個字段 // 自增 score 字段 db('user')->where('id', 1)->setInc('score');
//setInc 方法,參數1:是要自增的字段名,參數2[可省略],默認為1,是每次自增的數目,特別書用於網站點擊量啥的 // 自減 score 字段 db('user')->where('id', 1)->setDec('score');
//setDec 方法,參數1:是要自減的字段名,參數2[可省略],默認為1,是每次自減的數目,特別適用於商品庫存啥的
4、刪除數據
(1)刪除數據表中
【刪除時必須帶有條件,否則會報錯,如果想全部更新,則可以在where條件中寫上恆等式“1=1”】
【返回值為影響的行數】
// 根據主鍵刪除
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’,’<’,10)->delete();
(2)助手函數
//根據主鍵刪除 db('user')->delete(1); //條件刪除 db('user')->where('id',1)->delete();
五、查詢方法
1、條件查詢方法
(1)where 方法
// 可以使用where方法進行and條件查詢
Db::table('think_user') ->where('name','like','%thinkphp') ->where('status',1) ->find();
//多個字段相同條件的and查詢優化,用'&'符號鏈接多個字段
Db::table('think_user') ->where('name&title','like','%thinkphp') ->find();
//多個字段相同條件的or查詢優化,用'|'符號鏈接多個字段
Db::table('think_user') ->where('name|title','like','%thinkphp') ->find();
(2)whereOr 方法
//
使用whereOr 方法進行OR關系查詢,一般whereOr 方法根where 方法在一起使用
Db::table('think_user') ->where('id','>','10') ->whereOr('title','like','%thinkphp') ->find();
2、條件查詢方法
//where方法和whereOr方法在復雜的查詢條件中經常需要配合一起混合使用,下面舉個例子:
$result = Db::table('think_user')->where(function ($query) { $query->where('id', 1)->whereor('id', 2); })->whereOr(function ($query) { $query->where('name', 'like', 'think')->whereOr('name', 'like', 'thinkphp'); })->select();
3、getTableInfo 方法
//使用getTableInfo可以獲取表信息,信息類型 包括 fields,type,bind,pk,以數組的形式展示,可以指定某個信息進行獲取
// 獲取`think_user`表所有信息 Db::getTableInfo('think_user'); // 獲取`think_user`表所有字段 Db::getTableInfo('think_user', 'fields'); // 獲取`think_user`表所有字段的類型 Db::getTableInfo('think_user', 'type'); // 獲取`think_user`表的主鍵 Db::getTableInfo('think_user', 'pk');