J'utilise le code suivant pour la transaction dans Zend Cadre, mais la fonction de restauration ne fonctionne pas (les données sont insérées dans la base de données par insertion ($ données)).
Qu'est-ce qui ne va pas?
4 Réponses :
Nous ne pouvons pas obtenir cette question de la liste des questions "sans réponse" sur Stackoverflow à moins d'au moins une réponse avec un uppote. Donc, je répète la solution que vous avez discutée ci-dessus dans les commentaires. P>
@nos suggère: p>
est votre dB par hasard mysql en utilisant Tables myisam? Ils ne soutiennent pas transactions. Vous devriez utiliser innodb tables si vous voulez une transaction Soutien. P> blockQuote>
@Billy répond: p>
Oui, j'utilise des tables MyISAM. J'ai changé pour les tables innovées et ça marche. Merci. P> blockQuote>
(J'ai marqué cela comme une réponse en wiki communautaire, donc je n'en reçois pas de points.) p>
Si ma table était innodb (Vu de Show Create Create Create Table XXX CODE>) et ma transaction ne renvoyait pas, que suggérez-vous?
protected function tearDown()
{
global $db;
$db->rollBack();
}
Votre code est correct. p>
Vérifiez votre option de table. Vous devez utiliser un moteur transacement avec Innodb P>
Pour une utilisation future, pour savoir s'il s'agit vraiment d'une exception DB, utilisez Zend_DB_Exception à la place.
} catch (Zend_Db_Exception $e) { $db->rollBack(); echo $e->getMessage(); } catch (Exception $e) { echo $e->getMessage(); }
Votre DB est-il par hasard MySQL utilisant des tables MyISAM? Ils ne soutiennent pas les transactions. Vous devez utiliser des tables InnoDB si vous souhaitez un support de transaction.
Oui, j'utilise des tables Myisam. J'ai changé pour les tables innovées et ça marche. Merci.