Bonjour,

J'utilise PDO depuis un petit moment et je souhaiterai maintenant utiliser les transactions...

J'initialise une transaction, effectue l'ensemble de mes traitements, lorsque je lance le commit() ou le rollback, j'ai l'exception avec le message suivant :'There is no active transaction'

Je vous ai mis le code correspondant....
(j'ai supprimé pas mal de ligne inutile et il ne s'agit que d'une portion d'un script, le nombre de } peut être erroné...)

Merci d'avance !!!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
// Debut de la transaction PDO 
Factory::get( BDD_DRIVER ) -> beginTransaction() ;
 
// Preparation des requetes PDO
$preSelect 	= "SELECT note_valeur FROM etudiants_notes 
			     WHERE note_etu_numero = :etu_numero 
			     AND note_enseignement = '".$this -> idEns."' 
			     AND note_epreuve = $epreuveId " ;
 
$preUpdate	= "UPDATE etudiants_notes 
			    SET note_valeur = :note
			    WHERE note_etu_numero = :etu_numero 
			    AND note_enseignement = '".$this -> idEns."' 
			    AND note_epreuve = '$epreuveId' " ;
 
$preInsert	= "INSERT INTO etudiants_notes 
		    ( note_etu_numero , note_enseignement , note_epreuve , note_valeur )
	            VALUES
		    ( :etu_numero , '".$this -> idEns."' , '$epreuveId' , :note ) " ;
 
$stmtSelect = Factory::get( BDD_DRIVER ) -> prepare( $preSelect ) ;
$stmtUpdate = Factory::get( BDD_DRIVER ) -> prepare( $preUpdate ) ;
$stmtInsert = Factory::get( BDD_DRIVER ) -> prepare( $preInsert ) ;
 
// Ouverture du fichier en lecture
ini_set( 'auto_detect_line_endings' , TRUE ) ;
$csvContent = fopen( 'imports/'.$destinationName, 'r' ) ;
 
// Traitement des donnees du fichier CSV
while ( ( $data = fgetcsv( $csvContent, 20, ";" ) ) !== FALSE ) 
{
    $this -> statistiques['nbNote']++ ;
 
    // Preparation des donnees 
    $numEtu = $data[0] ;
    $noteEtu = $data[1] ;
    $noteEtu = str_replace(',', '.', $noteEtu ) ; 
 
   // J'ai supprime les verifications sur le contenu
 
    if ( $this -> error == NULL )
    {
        // Verification si la note est deja saisie
	$stmtSelect -> bindParam( ':etu_numero', $numEtu );
	$stmtSelect -> execute();
	$etuData	= $stmtSelect -> fetchAll( PDO::FETCH_ASSOC );
	$etuOldNote = @$etuData[0]['note_valeur'] ;
	$etuNb		= $stmtSelect -> rowCount() ;
 
	// Insertion de la note
	if ( $etuNb < 1 )
	{
		$stmtInsert -> bindParam( ':etu_numero', $numEtu );	
		$stmtInsert -> bindParam( ':note', $noteEtu );
		$stmtInsert -> execute() ;
	}
	// Mise a jour de la note
	elseif ( $etuNb == 1 && $etuOldNote == '99.00' )
	{
		$stmtUpdate -> bindParam( ':etu_numero' , $numEtu ) ;
		$stmtUpdate -> bindParam( ':note' , $noteEtu ) ;
		$stmtUpdate -> execute();
	}
 
        Factory::get( BDD_DRIVER ) -> commit() ;
    }
    else
    {
         Factory::get( BDD_DRIVER ) -> rollBack();
    }
}
}