transactions
の使用 データを安全に挿入するためのサポートデータベースを意味します。したがって、Codeigniterでは、すべてのデータベース関連関数をモデルに記述します。 コントローラにはありません。 。そして、2番目のコード(機能していません)では、そこにモデルを指定しています。(utils
)。とても単純なので、これはうまくいかないと確信しています。モデルとコントローラーが並列の挿入データではないためです。トランザクションはモデルにコーディングする必要があります(回答にモデルを書き込みます 。
これもロードする
- データベースライブラリ
- モデルクラス
- URLヘルパー
- セッション
前提条件
コードで$data
を使用しました および$test
配列として。したがって、データを挿入および更新するための配列が2つあると仮定します。
データセット
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$id = 007;
$test = array(
'title' => $title,
'name' => $name,
'date' => $date
);
あなたのコード
$this->db->trans_start(); # Starting Transaction
$this->db->trans_strict(FALSE); # See Note 01. If you wish can remove as well
$this->db->insert('table_name', $data); # Inserting data
# Updating data
$this->db->where('id', $id);
$this->db->update('table_name', $test);
$this->db->trans_complete(); # Completing transaction
/*Optional*/
if ($this->db->trans_status() === FALSE) {
# Something went wrong.
$this->db->trans_rollback();
return FALSE;
}
else {
# Everything is Perfect.
# Committing data to the database.
$this->db->trans_commit();
return TRUE;
}
メモ
- デフォルトでは、Codeigniterはすべてのトランザクションを厳密モードで実行します。 厳密モードが有効の場合 、トランザクションの複数のグループを実行している場合、1つのグループが失敗すると、すべてのグループがロールバックされます。 Ifstrictモードが無効 、各グループは独立して扱われます 、あるグループの失敗が他のグループに影響を与えないことを意味します 。