標籤: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操作-資料寫入