当PDO:commit
失败时,是否会抛出异常?或者只返回false
?
docs没有提及有关异常的任何内容,但其中一条评论说它确实如此。我无法找到自己测试的方法。
答案 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;
}