Transactions 事务错误处理不工作Neo4jphp
我试图在neo4j事务中使用Transactions 事务错误处理不工作Neo4jphp,transactions,cypher,neo4jphp,neo4j,Transactions,Cypher,Neo4jphp,Neo4j,我试图在neo4j事务中使用$transaction->isError()和$transaction->isClosed,但这些函数未能捕获错误 下面是我的代码,我在提交后执行了事务回滚,根据文档,这应该会产生一个错误,应该由isClosed()处理,但它从未处理过错误,而是产生了错误 代码 错误 但实际上,这个错误应该由$transaction->isClosed()处理,但它没有 请帮助,提前感谢提交后无法回滚。提交关闭事务,因此尝试回滚会抛出错误 在commit之后,您不需要回滚。如果添加
$transaction->isError()
和$transaction->isClosed
,但这些函数未能捕获错误
下面是我的代码,我在提交后执行了事务回滚,根据文档,这应该会产生一个错误,应该由isClosed()
处理,但它从未处理过错误,而是产生了错误
代码
错误
但实际上,这个错误应该由$transaction->isClosed()处理,但它没有
请帮助,提前感谢提交后无法回滚。提交关闭事务,因此尝试回滚会抛出错误
在commit
之后,您不需要回滚
。如果添加的任何语句失败,将在服务器上自动回滚。如果您的应用程序需要手动回滚事务,您只需调用rollback
,您应该在提交之前执行此操作。我如何知道事务有错误并且已回滚?我还应该如何手动回滚?如果在同一个应用程序中有多个数据库,那么如果其中任何一个数据库出现故障,我必须回滚Neo4j和其他数据库中的整个事务。所以在neo4j中,我如何知道条件语句中失败的事务。失败的语句将抛出和异常。另外,您可以通过调用$transaction->isError()
查看给定事务是否有错误。如果有多个数据库,则应分别检查每个连接是否存在错误,并仅回滚未失败的连接。失败的一个将已在服务器上回滚。这里的相关文档:当neo4j崩溃时,neo4j将自动回滚,但它不会由$transaction->isError()处理,因此我无法回滚我的其他数据库,因为$transaction->isError()返回false,然后将回滚调用包装在try-catch块中。但我更关心的是数据库为什么会崩溃。先把它修好。
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