什么是**如果(没有错误)**?

时间:2012-03-01 21:08:50

标签: php mysql kohana

我正在尝试向Kohana实现事务,但它似乎并不像Spring / Java那么容易。

到目前为止,我发现此代码尝试但我不知道如何更换部件(没有错误)

DB::query('START TRANSACTION');
// sql queries with query builder..

if (no errors)
    DB::query('COMMIT');
else
    DB::query('ROLLBACK');

如何制作if子句?

4 个答案:

答案 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();
}