首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Yii 框架連接 MySQL 與 PHPUnit 單元測試實戰指南

     編輯:MySQL 資料庫相關知識

資料庫連接配置

修改 protected/config/main.php,取消註釋 MySQL 連接配置並填寫正確憑證:

'db'=>array(
    'connectionString' => 'mysql:host=localhost;dbname=testdb',
    'username' => 'root',
    'password' => 'password',
    'charset' => 'utf8',
),

PHPUnit 連接測試

創建 protected/tests/unit/DbTest.php:

<?php
class DbTest extends CTestCase {
    public function testConnection() {
        $this->assertNotEquals(NULL, Yii::app()->db);
    }
}

執行測試:

cd protected/tests
phpunit unit/DbTest.php

Yii 修改數據的兩種核心方式

方式一:updateByPk() 靜態更新

$count = User::model()->updateByPk(
    $id,                    // 主鍵值或陣列
    array('email'=>'new@test.com'), // 更新字段陣列
    'status=:status',       // 條件子句
    array(':status'=>1)     // 參數綁定
);
if ($count > 0) echo '更新成功';

適用場景:已知主鍵,批量更新,無需先查詢實體。

方式二:findByPk() + update() 實體模式

$model = User::model()->findByPk($id);
if ($model) {
    $model->username = 'yiistudy';
    $model->password = 'mysql';
    $count = $model->update(array('username', 'password')); // 僅更新指定字段
    echo $count ? '成功' : '失敗';
}

優勢:觸發 beforeSave()、afterSave() 等生命週期事件,支持驗證規則,適合複雜業務邏輯。

最佳實踐建議

  • 大批量更新優先用 updateAll() 或 DAO 直寫 SQL
  • 事務操作包裹在 Yii::app()->db->transaction 中
  • 測試環境使用 SQLite 內存數據庫加速 PHPUnit 執行
  • 生產環境開啟 enableProfiling 監控慢查詢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved