Codeigniter フレームワーク更新トランザクション (トランザクション) のバグと解決策、Codeigniter フレームワーク
CIトランザクション判定エラーのロールバック条件はステートメントが正常に実行されたかどうかであるため、更新操作中は影響を受ける項目数が0であっても正常に実行されたためSQLステートメントの実行結果は1のままですが、影響を受けるアイテムの数のみが 0 です。
この問題を解決する方法は次のとおりです:
一度に多くのステートメントを実行する必要があるトランザクションの場合
更新操作中に影響を受けるアイテムの数が 0 かどうかに基づいてロールするかどうかを決定するだけで済みます。以下では、2 番目のステートメントが更新操作であると仮定します。
コードをコピーします コードは次のとおりです:
//Codeigniter トランザクションの手動モードを採用します
$this->db->trans_strict(FALSE);
$this->db->trans_begin();
$this->db->query('SELECT ...') //SELECT 操作には特別な処理は必要ありません
$this->db->query('INSERT ...');//INSERT エラーが発生した場合、Codeigniter が自動的に処理します
$this->db->query('UPDATE ...');
If (!$this->db->affacted_rows()) {//上記の UPDATE が失敗した場合、ロールバックします
$this->db->trans_rollback();
//@todo例外処理部分
Exit();//次の SQL コードが実行を継続しないように、終了または終了する必要があります。
}
$this->db->query('DELETE...');
If (!$this->db->affacted_rows()) {//上記の DELETE が失敗した場合は、ロールバックします
$this->db->trans_rollback();
//@todo例外処理部分
Exit();//次の SQL コードが実行を継続しないように、終了または終了する必要があります。
}
$this->db->query('SELECT ...') //SELECT 操作には特別な処理は必要ありません
$this->db->query('INSERT ...');//INSERT エラーが発生した場合、Codeigniter が自動的に処理します
If ($this->db->trans_status() === TRUE) {
$this->db->trans_commit();
} その他 {
$this->db->trans_rollback();
//@todo例外処理部分
}
一度に実行されるステートメントが少ない場合は、最後に判断してロールバックするかどうかを決定できます
ステートメントに更新操作がない場合は、自動トランザクションを使用してください。
同時実行数は主にサーバー アーキテクチャに関係しますが、キャッシュがどの程度適切に使用されるかなど、プログラムの最適化も大きく関係します。もちろんフレームワークとは関係ありません
昨日 CodeIgniter マニュアルを読んだところですが、CodeIgniter の URL の章でその方法が説明されています:
次のように .htaccess ファイルにルールを追加することで処理されます
RewriteEngine on
RewriteCond $1 !^(index\. php| 画像|ロボット\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
http://www.bkjia.com/PHPjc/848801.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/848801.html技術記事 Codeigniter フレームワークの更新トランザクション (トランザクション) のバグと解決策 CI トランザクション判定エラーによる codeigniter フレームワークのロールバックの条件は、ステートメントが正常に実行されたかどうか、および更新操作が ...