ThinkPHP5-數據庫基本操做


1、數據庫配置 
一、在應用目錄或者模塊目錄下面的database.php中添加下面的配置參數: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, ];

二、方法中配置(字符串配置、數組配置):mysql

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_',
   ]);

2、基本查詢sql

一、query(查詢操做)execute(寫入操做) 原生態SQL語句 增刪改查thinkphp

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');

二、 參數綁定 命名佔位符綁定數據庫

支持參數綁定:
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']);

3、查詢構造器 數組

【在thinkPHP5.0.9以後,db('表名') 助手函數默認再也不強制從新鏈接,這樣大大的縮減了每次使用時重連數據庫的操做時間,更加方便】ruby

【在數據庫配置中配置了表前綴的狀況下(假定表前綴是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)查詢一個數據使用:函數

// 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();

二、添加數據: 
(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);

三、更新數據: 

【更新時必須帶有條件,不然會報錯,若是想所有更新,則能夠在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,是每次自減的數目,特別適用於商品庫存啥的

四、刪除數據 
(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();

5、查詢方法
一、條件查詢方法

(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();

二、條件查詢方法
//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();

三、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');
相關文章
相關標籤/搜索