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

Yii 1.x 修改 MySQL 資料兩種核心方法詳解

     編輯:PHP 相關知識

AR 模型更新資料:updateByPk() 與實例 update() 完整對比

Yii 1.x 提供兩種主要方式修改資料庫記錄:類別層級的 updateByPk() 與實例層級的 update()。本文詳細說明兩者用法、參數與適用場景。

方法一:updateByPk() — 類別層級批次更新

<?php
/* 參數說明:
 * $id        主鍵值(單一或陣列)
 * $attributes 欲更新的欄位陣列 ['欄位'=>值, ...]
 * $condition 額外 WHERE 條件(可選)
 * $params    條件參數綁定(可選)
 */
$count = Model::model()->updateByPk($id, $attributes, $condition, $params);

if ($count > 0) {
    echo '修改成功,影響 ' . $count . ' 筆';
} else {
    echo '修改失敗或無資料符合';
}
?>

特點:

  • 不需先載入模型實例,直接發送 UPDATE SQL。
  • 支援複合主鍵($id 為陣列)與批次更新多筆($id 為陣列)。
  • 回傳影響行數,便於判斷是否真正修改。
  • 適合後台批次操作、API 批次更新等場景。

方法二:實例 update() — 載入後修改

<?php
$model = Model::model()->findByPk($id); // 先載入
if ($model) {
    $model->username = 'yiistudy';
    $model->password = 'mysql';
    // 僅更新指定欄位(可選),否則更新所有髒屬性
    $count = $model->update(['username', 'password']);

    if ($count > 0) {
        echo '修改成功';
    } else {
        echo '修改失敗';
    }
} else {
    echo '找不到對應記錄';
}
?>

特點:

  • 需先 findByPk() 載入,觸發 afterFind 等事件。
  • 可利用模型驗證規則(rules()),save() 會自動驗證;update() 可指定欄位略過驗證。
  • 適合表單提交、需觸發事件/行為的業務流程。
  • 若主鍵為自增,isNewRecord 區分 INSERT/UPDATE。

選擇建議

場景推薦方法理由
簡單批次更新、無需驗證/事件updateByPk()效能較好、程式碼簡潔
表單編輯、需驗證、觸發事件實例 update()/save()完整生命週期、資料完整性
條件複雜、非主鍵條件更新updateAll()類別層級支援任意 WHERE

補充:updateAll($attrs, $condition, $params) 可依任意條件批次更新,updateCounters() 專用於計數器欄位原子遞增/遞減。

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