Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-06-2009 12:30:11

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Zend_Db - Mysql, rollback et auto commit

Bonjour,

j'ai un problème avec un mes transactions.

but : J'essaie de faire plusieurs mises à jour sur une table. si une requête n'a pas fonctionnée, ou si les données ne sont pas cohérentes (suite à un test), je veux annuler toutes les dernières requêtes et revenir à l'état initial de ma base.

Pour celà, j'essaie d'utiliser une transaction et le commit/rollback.
Le problème est que quoi que je fasse, le rollback ne semble pas fonctionner. Il doit y avoir un auto commit activé, mais impossible de trouver comment le désactiver.

Code:

$db = Zend_Registry::get('db');
$db->beginTransaction();
try {
    $db -> query("update matable set champ1 = 13 where id = 3");
    $db -> query("update matable_erreur set champ1 = 14 where id = 4");
    $db->commit();
}
catch (Exception $e)
{
    $rb = $db -> rollback();Zend_Debug::dump($rb, 'rollback');
    Zend_Debug::dump('Rollback -> '.$e -> getMessage(), 'message');
}

Affichage  du débug :

Code:

rollback 

boolean true

message 

string 'Rollback -> SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mabase.matable_erreur' doesn't exist' (length=111)

Par contre, dans la base, la 1ère requête a été exécutée, la colonne champ1 vaut bien 13 pour la ligne id=3. La transaction n'a donc pas été annulée.

Savez vous comment désactiver l'autocommit avec Zend_db pour pdo_mysql ?

Merci d'avance,
Laurent

Hors ligne

 

#2 18-06-2009 09:08:32

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Zend_Db - Mysql, rollback et auto commit

Je ne pense pas que ce soit à Zend_Db de faire cela.

http://dev.mysql.com/doc/refman/5.0/fr/commit.html

Hors ligne

 

#3 18-06-2009 10:41:29

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Db - Mysql, rollback et auto commit

ce n'est pas un pb d'auto commit si tu fais une transaction
$db->beginTransaction();
l'auto comit n'est pas pris en compte par MySQL

non ton problème vient de MySQL lui même

Dans MySQL si ton moteur de base de données ne supporte pas les transactions (et c'est le cas le plus courant avec MySQL) les commande SQL BEGIN TRANSACTION COMMIT ET ROLLBACK n'ont aucun effets.

pour beneficier du mode transactionnel il faut que toutes les tables de ta base entrant dans la transaction utilise un moteur transactionnel comme INNODB. mais attention cela a un revers la base double de volume et côté perf ce n'est plus du tout la même chose.

perso pour du transactionnel je préfère de loin PostgreSQL
A+JYT

Hors ligne

 

#4 18-06-2009 10:53:43

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Re: Zend_Db - Mysql, rollback et auto commit

Bonjour,

Merci de vos réponses.

Mes bases sont en MyISAM et non INNODB, ça doit être pour ça !
Je prèfère également PostgreSQL, mais sur ce projet je n'ai pas eu le choix.
Tant pis, je ferais autrement.

Merci,

Laurent

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages