首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 陣列寫入資料並取得最新自增 ID 完整範例

     編輯:PHP 綜合知識

前言

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()。
  • 輸入驗證:寫入前應驗證 username/email 格式、長度、唯一性,建議使用 ThinkPHP 內建驗證器 validate。
  • 防止 SQL 注入:add() 內部已使用參數化查詢,但若手工拼接 where() 條件請務必用陣列綁定。
  • 事務控制:多表關聯寫入時請包裹在 $Dao->startTrans() / commit() / rollback() 中。

結語

M()->add($data) 是 ThinkPHP 最基礎且高頻使用的寫入方法,掌握其回傳值即為新增 ID 的特性,能輕鬆實現「寫入後立即導向詳情頁」「寫入主表後寫入關聯表」等常見業務流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved