2014-04-23 1 views
0

mysql과 같은 관계형 데이터베이스의 경우 PHP에서의 트랜잭션 처리는 이와 유사합니다.neo4jphp에서 트랜잭션을 처리하는 방법은 무엇입니까?

Begin transaction 
... 
Insert queries 
... 
Update queries 
... 
if error in any query then 
Rollback transaction 
... 
at end, if no error in any query then 
Commit transaction 

에서 트랜잭션을 처리하는 방법은 무엇입니까?

같은 시도를했지만 실패했습니다. 롤백 후에도 변경 사항이 저장되었습니다.

나는 이렇게하고 있었다.

//$client = Neo4jClient 
$transaction = $client->beginTransaction(); 
... 
//Insert queries 
... 
//Update queries 
... 
//if error in any query then 
$transaction->rollback(); 
... 
// at end, if no error in any query then 
$transaction->commit(); 
+0

당신이 어떤 오류를 보았는가 볼 수없는 경우는? 데이터베이스 오류 또는 응용 프로그램 오류가 있습니까? 또한 데이터베이스에서 오류가 발생하면 변경 사항이 자동으로 롤백됩니다. 응용 프로그램이 변경 사항을 취소해야하는 경우에만 롤백을 명시 적으로 호출해야합니다. –

+0

@JoshAdell : 우선 트랜잭션에 Query 문을 추가하지 않았습니다. mysql 트랜잭션과 비슷하다. "트랜잭션이 이미 닫혔습니다"와 같은 오류가 발생했음을 확인한 후 나는 "$ transaction-> rollback();"이라고 부르기 때문에 다시. 이제 나는 내 문제를 해결했다. 좋은 플러그인'neo4jphp'에 감사 드리며 응답 해 주셔서 감사합니다. –

답변

1

다음 코드를 확인하십시오.

//$client = Neo4jClient 
$transaction = $client->beginTransaction(); 

$dataCypherQuery = new Query($client, $dataQuery, $params); 

쿼리에서 결과 집합을 얻는 대신 트랜잭션에 문을 추가해야합니다.

// $dataResult = $dataCypherQuery->getResultSet(); // don't do this for transaction 

중요 : 조회 오브젝트를 트랜잭션의 명령문 메소드로 전달하십시오.

$dataResult = $transaction->addStatements($dataCypherQuery); 

트랜잭션 커밋을 나타내는 매개 변수로 true를 전달할 수 있습니다.

//$dataResult = $transaction->addStatements($dataCypherQuery, true); 

오류가 있으면 변경 사항이 자동으로 롤백됩니다. $ dataResult 변수의 유효성을 검사 할 수 있습니다. 결과가 반환되어야합니다.

if (0 == $dataResult->count()) { 
    $transaction->rollback(); 
} 
끝에

, 어떤 쿼리에 오류가 다음 추가 정보를 위해

$transaction->commit(); 

Cypher-Transactions