PDO :: commit会在失败时抛出异常吗?

时间:2015-04-16 15:21:32

标签: php mysql

PDO:commit失败时,是否会抛出异常?或者只返回false

docs没有提及有关异常的任何内容,但其中一条评论说它确实如此。我无法找到自己测试的方法。

1 个答案:

答案 0 :(得分:1)

从php_pdo.c来看,似乎commit方法实际上可以抛出异常。至少,当没有活动交易时。

static PHP_METHOD(PDO, commit)
{
    pdo_dbh_t *dbh = Z_PDO_DBH_P(getThis());

    if (zend_parse_parameters_none() == FAILURE) {
        return;
    }
    PDO_CONSTRUCT_CHECK;

    if (!dbh->in_txn) {
        zend_throw_exception_ex(php_pdo_get_exception(), 0, "There is no active transaction");
        RETURN_FALSE;
    }

    if (dbh->methods->commit(dbh)) {
        dbh->in_txn = 0;
        RETURN_TRUE;
    }

    PDO_HANDLE_DBH_ERR();
    RETURN_FALSE;
}