ThinkPHP3.2基礎教程(20)--模型-CURD操作-資料寫入

來源:互聯網
上載者:User

標籤:body   rip   l資料庫   pos   執行sql   class   大量新增資料   處理   字串   

  ThinkPHP的資料寫入操作使用add方法,使用樣本如下:

    $User = M("User"); // 執行個體化User對象    $data[‘name‘] = ‘ThinkPHP‘;    $data[‘email‘] = ‘[email protected]‘;    $User->add($data);

  如果是Mysql資料庫的話,還可以支援在資料插入時允許更新操作:

    add($data=‘‘,$options=array(),$replace=false)

  其中add方法增加$replace參數(是否添加資料時允許覆蓋),true表示覆蓋,預設為false

  或者使用data方法連貫操作

$User = M("User"); // 執行個體化User對象$User->data($data)->add();

  如果在add之前已經建立資料對象的話(例如使用了create或者data方法),add方法就不需要再傳入資料了。 使用create方法的例子:

$User = M("User"); // 執行個體化User對象// 根據表單提交的POST資料建立資料對象if($User->create()){    $result = $User->add(); // 寫入資料到資料庫     if($result){        // 如果主鍵是自動成長型 成功後傳回值就是最新插入的值        $insertId = $result;    }}

  create方法並不算是連貫操作,因為其傳回值可能是布爾值,所以必須要進行嚴格判斷。

支援的連貫操作

  在執行add方法之前,我們可以調用相關的連貫操作方法,配合完成資料寫入操作。

寫入操作支援的連貫操作方法包括:

連貫操作 作用 支援的參數類型
table 用於定義要操作的資料表名稱 字串和數組
data 用於指定要寫入的資料對象 數組和對象
field 用於定義要寫入的欄位 字串和數組
relation 用於關聯查詢(需要關聯模型支援) 字串
validate 用於資料自動驗證 數組
auto 用於資料自動完成 數組
filter 用於資料過濾 字串
scope 用於命名範圍 字串、數組
bind 用於資料繫結操作 數組
token 用於令牌驗證 布爾值
comment 用於SQL注釋 字串
fetchSql 不執行SQL而只是返回SQL 布爾值

 

 

 

 

 

 

 

 

 

 

 

 

  3.2.3版本開始,可以支援不執行SQL而只是返回SQL語句,例如:

$User = M("User"); // 執行個體化User對象$data[‘name‘] = ‘ThinkPHP‘;$data[‘email‘] = ‘[email protected]‘;$sql = $User->fetchSql(true)->add($data);echo $sql;// 輸出結果類似於// INSERT INTO think_user (name,email) VALUES (‘ThinkPHP‘,‘[email protected]‘)

  欄位過濾

  如果寫入了資料表中不存在的欄位資料,則會被直接過濾,例如:

$data[‘name‘] = ‘thinkphp‘;$data[‘email‘] = ‘[email protected]‘;$data[‘test‘] = ‘test‘;$User = M(‘User‘);$User->data($data)->add();

  其中test欄位是不存在的,所以寫入資料的時候會自動過濾掉。

  在3.2.2版本以上,如果開啟偵錯模式的話,則會拋出異常,提示:非法資料對象:[test=>test]

  如果在add方法之前調用field方法,則表示只允許寫入指定的欄位資料,其他非法欄位將會被過濾,例如:

$data[‘name‘] = ‘thinkphp‘;$data[‘email‘] = ‘[email protected]‘;$data[‘test‘] = ‘test‘;$User = M(‘User‘);$User->field(‘name‘)->data($data)->add();

  最終只有name欄位的資料被允許寫入,email和test欄位直接被過濾了,哪怕email也是資料表中的合法欄位。

  欄位內容過濾

  通過filter方法可以對資料的值進行過濾處理,例如:

$data[‘name‘] = ‘<b>thinkphp</b>‘;$data[‘email‘] = ‘[email protected]‘;$User = M(‘User‘);$User->data($data)->filter(‘strip_tags‘)->add();

  寫入資料庫的時候會把name欄位的值轉化為thinkphp。

  filter方法的參數是一個回調類型,支援函數或者閉包定義。

批量寫入

  在某些情況下可以支援資料的批量寫入,例如:

// 大量新增資料$dataList[] = array(‘name‘=>‘thinkphp‘,‘email‘=>‘[email protected]‘);$dataList[] = array(‘name‘=>‘onethink‘,‘email‘=>‘[email protected]‘);$User->addAll($dataList);

  該功能需要3.2.3以上版本,3.2.3以下版本僅對mysql資料庫支援

 

ThinkPHP3.2基礎教程(20)--模型-CURD操作-資料寫入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.