Salve, ho un dubbio su come funziona la classe PDO e in particolare la gestione delle eccezioni e delle transazioni.

In giro ho trovato il seguente script:

Codice PHP:
<?php
/*** mysql hostname ***/
$hostname 'localhost';

/*** mysql username ***/
$username 'username';

/*** mysql password ***/
$password 'password';

/*** database name ***/
$dbname 'dbname';

try {
    
$options = array(PDO::ATTR_AUTOCOMMIT=>FALSE);
    
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname"$username$password$options);
    
/*** echo a message saying we have connected ***/
    
echo 'Connected to database
'
;

    
/*** set the PDO error mode to exception ***/
    //$dbh->setAttribute(PDO_ATTR_AUTOCOMMIT, 0); 
    
$dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

    
/*** CREATE table statements ***/
    
$table "CREATE TABLE animals ( animal_id MEDIUMINT(8) NOT NULL PRIMARY KEY,
    animal_type VARCHAR(25) NOT NULL,
    animal_name VARCHAR(25) NOT NULL 
    )"
;
    
$dbh->exec($table);

    
/*** begin the transaction ***/
    
$dbh->beginTransaction();

    
/***  INSERT statements ***/
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (1, 'emu', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (2, 'funnel web', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (3, 'lizard', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (4, 'dingo', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (5, 'kangaroo', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (6, 'wallaby', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (6, 'wombat', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (8, 'koala', 'bruce')");
    
$dbh->exec("INSERT INTO animals (animal_id, animal_type, animal_name) VALUES (9, 'kiwi', 'bruce')");

    
/*** commit the transaction ***/
    
$dbh->commit();

    
/*** echo a message to say the database was created ***/
    
echo 'Data entered successfully
'
;
}
catch(
PDOException $e)
    {
    
/*** roll back the transaction if we fail ***/
    
$dbh->rollback();

    
/*** echo the sql statement and error message ***/
    
echo $sql '
$e->getMessage();
    }
?>
mi aspettavo che nella tabella in oggetto 'animals' non fossero presenti nessun record inserito perchè avendo violato la chiave primaria 'animal_id = 6' e non avendo fatto la commit.

Cosa sbaglio ?