jacfev
2010-08-12 20:08:08 UTC
Bonjour,
Dans l'exemple simple ci-dessous, en PDO, la transaction n'est pas annulée
(la première requête est exécutée quand même) alors qu'il y a une erreur
(volontaire) dans la 2ème requête.
Auncune des requêtes ne devrait être exécutée puisqu'il s'agit d'une
transaction.
Il me semble pourtant avoir respecté les indications de :
http://fr.php.net/manual/fr/pdo.transactions.php
Mon exemple qui pose problème :
<?php
include_once('connect.inc.php');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
try {
$sql = "INSERT INTO auteur (login, nom, prenom)
VALUES ('Max', 'Havelard', 'isGood')";
$dbh->exec($sql);
// syntaxe incorrecte ici volontairement (titlre au lieu de titre)
$sql2 = "INSERT INTO article (titlre, texte, auteur)
VALUES ('PHP 5 V5 !', 'il est sorti', 'Max')";
$dbh->exec($sql2);
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Echec: ".$e->getMessage();
}
?>
Le fichier connect.inc.php inclus
<?php
define('DSN1', 'mysql:host=localhost;dbname=publication');
define('USER1', 'cyril');
define('PASS1', 'motdepasse');
try {
$dbh = new PDO(DSN1, USER1, PASS1);
//utilisation de la connexion
} catch (PDOException $e) {
print "Erreur ! : ".$e->getMessage()."<br/>";
die();
}
?>
La base et les tables fonctionnent par ailleurs correctement.
Pour connaisseur en PDO;
Où est l'erreur ?
Cordialement
jf.
Dans l'exemple simple ci-dessous, en PDO, la transaction n'est pas annulée
(la première requête est exécutée quand même) alors qu'il y a une erreur
(volontaire) dans la 2ème requête.
Auncune des requêtes ne devrait être exécutée puisqu'il s'agit d'une
transaction.
Il me semble pourtant avoir respecté les indications de :
http://fr.php.net/manual/fr/pdo.transactions.php
Mon exemple qui pose problème :
<?php
include_once('connect.inc.php');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
try {
$sql = "INSERT INTO auteur (login, nom, prenom)
VALUES ('Max', 'Havelard', 'isGood')";
$dbh->exec($sql);
// syntaxe incorrecte ici volontairement (titlre au lieu de titre)
$sql2 = "INSERT INTO article (titlre, texte, auteur)
VALUES ('PHP 5 V5 !', 'il est sorti', 'Max')";
$dbh->exec($sql2);
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Echec: ".$e->getMessage();
}
?>
Le fichier connect.inc.php inclus
<?php
define('DSN1', 'mysql:host=localhost;dbname=publication');
define('USER1', 'cyril');
define('PASS1', 'motdepasse');
try {
$dbh = new PDO(DSN1, USER1, PASS1);
//utilisation de la connexion
} catch (PDOException $e) {
print "Erreur ! : ".$e->getMessage()."<br/>";
die();
}
?>
La base et les tables fonctionnent par ailleurs correctement.
Pour connaisseur en PDO;
Où est l'erreur ?
Cordialement
jf.