我正在尝试向Kohana实现事务,但它似乎并不像Spring / Java那么容易。
到目前为止,我发现此代码尝试但我不知道如何更换部件(没有错误)
DB::query('START TRANSACTION');
// sql queries with query builder..
if (no errors)
DB::query('COMMIT');
else
DB::query('ROLLBACK');
如何制作if子句?
答案 0 :(得分:2)
通常情况下处理交易:
DB::query('START TRANSACTION');
try {
//do something
DB::query('COMMIT');
} catch (Exception $e) {
DB::query('ROLLBACK');
}
这意味着如果一切都在try
区块内成功,那就太好了。如果它的任何部分失败,那么它将无法到达commit
并将跳转到包含catch
的{{1}}块。如果您愿意,可以在rollback
内添加更多错误处理,甚至抛出您自己的新异常或抛出您捕获的相同异常。
答案 1 :(得分:1)
将所有内容包装在try / catch块中:
DB::query('START TRANSACTION');
try {
// sql queries with query builder..
DB::query('COMMIT');
} catch (Database_Exception $e) {
DB::query('ROLLBACK');
}
答案 2 :(得分:0)
数据库错误转换为异常:
DB::query('START TRANSACTION');
try {
// sql queries with query builder..
DB::query('COMMIT');
}
catch($e)
{
$this->template->body = new View('db_error');
$this->template->body->error = 'An error occurred ...';
DB::query('ROLLBACK');
}
答案 3 :(得分:0)
如果您正在使用Kohana 3:
$db = Database::instance();
$db->begin();
try
{
// Do your queries here
$db->commit();
}
catch (Database_Exception $e)
{
$db->rollback();
}