【发布时间】:2010-09-17 17:40:17
【问题描述】:
我遇到了一个问题,希望能得到一些帮助。我正在使用以下内容:
Kohana 3.0.7
PostgreSQL 8.4
PostgreSQL 中的事务使用
$db->query(NULL, 'BEGIN', FALSE)
$db->query(NULL, 'ROLLBACK', FALSE);
$db->query(NULL, 'COMMIT', FALSE);
问题是,当我向数据库发送一个导致事务中出现 postgres 错误的查询时,我的系统会冻结。当我将相同的查询发送到数据库而不将其包装在事务中时,会按预期报告 PDO 错误。这是一个例子:
第一个示例工作正常,重复键值违反唯一约束“pk_test_table”错误返回:
$query = DB::query(Database::INSERT, 'INSERT INTO test_table (test_table_id, test_table_val) VALUES (:id, :value)';
$query->param(':id', 1);
$query->param(':value', "test value");
try
{
$result = $query->execute($db);
}
catch (Exception $e)
{
echo 'Caught exception: ', $e->getMessage(), "\n";
}
第二个例子导致我的系统死机(我不知道这是一个无限循环,还是其他一些死机):
$db->query(NULL, 'BEGIN', FALSE);
$query = DB::query(Database::INSERT, 'INSERT INTO test_table (test_table_id, test_table_val) VALUES (:id, :value)';
$query->param(':id', 1);
$query->param(':value', "test value");
try
{
$result = $query->execute($db);
}
catch (Exception $e)
{
echo 'Caught exception: ', $e->getMessage(), "\n";
}
$db->query(NULL, 'ROLLBACK', FALSE);
如您所见,唯一的区别是第二个示例包含在事务中。
对正在发生的事情有任何想法吗?有什么建议可以尝试吗?
【问题讨论】:
标签: exception postgresql transactions kohana-3