1

我尝试在 neo4j 事务中使用$transaction->isError()$transaction->isClosed,但这些函数未能捕捉到错误。

下面是我的代码,我在提交后进行了事务回滚,根据文档,它应该会产生错误并且应该由 处理isClosed(),但它从未处理过错误,而是产生了错误。

代码

require("vendor/autoload.php");
        use Everyman\Neo4j\Cypher\Query;
        $client = new Everyman\Neo4j\Client();

        $transaction = $client->beginTransaction();

        $queryA = new Query($client, 'CREATE (n:testing{id:189})');
        $result = $transaction->addStatements($queryA);
        $transaction->commit();
        $transaction->rollback(); // performing rollback after commit
if ($transaction->isClosed()) {
    echo "No more statements can be added!";
}

错误

Fatal error: Uncaught exception 'Everyman\Neo4j\Exception' with message 'Transaction is already closed' in C:\xampp\htdocs\feed\vendor\everyman\neo4jphp\lib\Everyman\Neo4j\Transaction.php on line 149

但实际上这个错误应该由 处理$transaction->isClosed(),但它没有

请帮忙,提前谢谢

4

1 回答 1

1

提交后您无法回滚。提交关闭事务,因此尝试回滚会引发错误。

你不需要rollbackcommit. 如果任何添加的语句失败,回滚将在服务器上自动发生。rollback如果您的应用程序需要手动回滚事务,您只需要调用,您应该在提交之前执行此操作。

于 2014-03-01T22:49:49.557 回答