Je fais des transactions en PHP avec la classe mysqli et je trouve la documentation de autocommit() terriblement incomplète. Je déduis des exemples que le fait de mettre autocommit à false exécute implicitement une "transaction de début". Est-ce correct ? Plus important encore, je ne vois pas où autocommit est remis à true, alors que je suppose qu'il devrait l'être après la fin d'une transaction. Cela se produit-il automatiquement lorsque les méthodes commit() ou rollback() sont appelées ?
Réponses
Trop de publicités?Il n'effectue pas implicitement un START TRANSACTION
car il effectue des transactions ad hoc : http://dev.mysql.com/doc/refman/5.0/en/commit.html
Avec autocommit(false)
chaque fois que vous exécutez une requête d'écriture, vous devez COMMIT
pour qu'il soit mis à jour de façon permanente sur le disque. Ceci est vrai pour toutes les requêtes de cette connexion à partir de ce moment-là. Avec autocommit(true)
si vous utilisez START TRANSACTION
exécuter une mise à jour, exécuter COMMIT
puis lancez une autre mise à jour, les deux Les mises à jour seront appliquées immédiatement (c'est-à-dire qu'il n'y aura pas de deuxième mise à jour). COMMIT
est nécessaire).
autocommit
ne sera jamais réinitialisé à true
mais elle n'est définie que par session (session MySQL, pas session PHP).
Autocommit(FALSE) restera faux pour les requêtes suivantes. Après avoir effectué un commit-statement, l'autocommit reviendra à true. Je ne suis pas sûr du rollback si cela fait la même chose. J'utilise cette méthode depuis quelques années et elle a toujours bien fonctionné.
Si vous voulez de la cohérence dans votre db, c'est la bonne solution.