深入理解Yii2 資料庫事務

2022-09-20 15:51:11 字數 1034 閱讀 2302

事務(transaction)

在yii中,使用 yii\db\transaction 來表示資料庫事務。

一般情況下,我們從資料庫連線啟用事務,通常採用如下的形式:

$transaction=$connection->begintransaction();

try catch (exception $e) else catch (exception $e) catch (exception $e) else else {

yii::info('transaction not rolled back: nested transaction not supported', __method__);

throw new exception('roll back failed: nested transaction not supported.');

對於提交和回滾:

提交時,會使層級+1,回滾時,會使層級-1

對於最外層的提交和回滾,使用的是資料庫事務的 commit 和 rollback

對於巢狀的內層的提交和回滾,使用的其實是事務儲存點的釋放和回滾

釋放儲存點時,會釋放儲存點的識別符號,這個識別符號在下次事務巢狀達到這個層級時, 會被再次使用。

有效的事務

在上面的提交、回滾等方法的**中,我們多次看到了乙個 this->getisactive() 。 這是用於判斷當前事務是否有效的乙個方法,我們通過它,來看看什麼樣的乙個事務, 算是有效的:

public function getisactive()

return $this->_level > 0 && $this->db && $this->db->isactive;

方法很簡單明瞭,乙個有效的事務必須同時滿足3個條件:

_level > 0 。這是由於為0是,要麼是剛剛初始化, 要麼是所有的事務已經提交或回滾了。也就是說,只有呼叫過了 begin() 但還沒有呼叫過匹配的 commit() 或 rollback() 的事務物件,才是有效的。

資料庫連線要已經初始化。

資料庫連線也必須是有效的。

Yii2基礎筆記(四) 深入理解布局檔案

布局檔案 views layouts main.php 主要包括頁面顯示的頭部 導航欄 尾部 footer 一 自定義布局檔案的使用 在controller的action中新增 this layout 指定的布局檔案 不需要加php字尾名不同的action可以指定各自的布局檔案。讓所有的action...

yii2資料庫遷移

yii migrate create create test table 建立乙個資料庫遷移 yii migrate 提交所有的遷移 yii migrate m160623 034801 create test table 指定類名,提交乙個遷移 yii migrate down 還原最近一次遷移 ...

基礎YII2資料庫操作

注意 為了保持精度,從資料庫中取出的資料都被表示為字串,即使相應的資料庫列型別數值。當建立從乙個帶引數的sql乙個db命令,你應該總是使用繫結引數的方法來防止sql注入攻擊。引數繫結是通過預處理語句來實現。除了防止sql注入攻擊,也可通過一次準備sql語句和多次使用不同的引數執行它提高效能 yii ...