code Exemple:PHP PDO L'annulation de la transaction en cas d'échec de l'exécution?
$pdo->beginTransaction();
try {
$query1 = $pdo->prepare(...);
$query2 = $pdo->prepare(...);
$query1->execute();
$query2->execute();
$pdo->commit();
} catch(Exception $e){
try {
$pdo->rollBack();
} catch(Exception $re){
//...
}
//...
}
Je sais que préparer peut jeter exception, et COMMIT jetteront exception s'il n'y a pas de transaction en cours d'exécution.
Mais est-il possible de se produire dans une telle situation dans laquelle la préparation réussira mais échouera? Cela ne provoquerait pas de retour en arrière? Est-ce que commit lance aussi quand l'exécution a échoué (je ne pense pas, comme la documentation dit qu'il se lance seulement quand il n'y a pas de transaction).
dois-je vérifier explicitement pour résultat d'exécution et de jeter mes propres exceptions comme celui-ci entraîne l'annulation ?:
$pdo->beginTransaction();
try {
$query1 = $pdo->prepare(...);
$query2 = $pdo->prepare(...);
if(!$query1->execute()){
throw new Exception('Query1 failed to execute.');
}
if(!$query2->execute()){
throw new Exception('Query2 failed to execute.');
}
$pdo->commit();
} catch(Exception $e){
try {
$pdo->rollBack();
} catch(Exception $re){
//...
}
//...
}
Avez-vous configuré le PDO pour lancer des exceptions sur l'erreur – RiggsFolly
Mais fondamentalement, si vous n'obtenez pas de validation, la transaction doit être annulée – RiggsFolly
PDO :: rollBack() lance une exception PDOException quand il s'agit de restaurer sans avoir préalablement ouvert transaction. –