ThinkPHP 的 M() 模型提供 add() 方法支援陣列寫入,且回傳值為新增資料的自增主鍵 ID。本文以會員註冊為例,示範如何組裝資料陣列、寫入資料庫、取得最新 ID 並處理失敗情況。
<?php
class UserController extends Controller {
public function insert2() {
// 1. 設定輸出編碼
header('Content-Type: text/html; charset=utf-8');
// 2. 實例化模型 (對應 user 表)
$Dao = M('User');
// 3. 組裝寫入陣列
$data = [
'username' => $_POST['username'],
'password' => md5($_POST['password']), // 實務建議用 password_hash()
'email' => $_POST['email'],
'regdate' => time(),
];
// 4. 執行寫入並取得自增 ID
if ($lastInsId = $Dao->add($data)) {
// 成功:$lastInsId 即為新資料的主鍵 ID
echo "插入資料 ID 為:$lastInsId";
} else {
// 失敗:顯示錯誤訊息
$this->error('資料寫入錯誤!');
}
}
}
?>
| 步驟 | 方法/屬性 | 說明 |
|---|---|---|
| 實例化模型 | M('User') | 對應 think_user 表 (依表前綴設定) |
| 寫入資料 | $Dao->add($data) | $data 為關聯陣列,鍵對應欄位名 |
| 取得新增 ID | 回傳值 | 成功回傳 INSERT_ID (int);失敗回傳 false |
| 錯誤處理 | $this->error() | ThinkPHP 內建跳轉提示,可自定義錯誤頁 |
<?php
if ($id = $Dao->add($data)) {
// 方法 1:再查一次 (簡單)
$newRow = $Dao->find($id);
// 方法 2:使用 getLastSql() 除錯
// echo $Dao->getLastSql();
// 方法 3:資料物件模式 (ThinkPHP 3.2+)
$Dao->data($data)->add();
$newRow = $Dao->find($Dao->getLastInsID());
}
?>
md5() 僅為示範,實務**必須**使用 password_hash($pwd, PASSWORD_BCRYPT) 及 password_verify()。validate。add() 內部已使用參數化查詢,但若手工拼接 where() 條件請務必用陣列綁定。$Dao->startTrans() / commit() / rollback() 中。M()->add($data) 是 ThinkPHP 最基礎且高頻使用的寫入方法,掌握其回傳值即為新增 ID 的特性,能輕鬆實現「寫入後立即導向詳情頁」「寫入主表後寫入關聯表」等常見業務流程。