2010-01-12 4 views
2

Dans notre objet de couche de base de données, nous avons toujours géré les transactions avec les instructions SQL "START TRANSACTION", "ROLLBACK" et "COMMIT" exécutées via mysqli :: query.PHP mysqli :: autocommit VS "START TRANSACTION"

Faire des recherches aujourd'hui, j'ai découvert this mention in the MySQL Manual en ce qui concerne l'utilisation du niveau de l'API des appels pour gérer une opération VS utilisant SQL droite:

importantes

De nombreuses API utilisées pour écrire des applications clientes MySQL (comme JDBC) fournissent leurs propres méthodes pour démarrer transactions qui peuvent (et parfois doivent) être utilisées au lieu d'envoyer une instruction START TRANSACTION à partir du client . Pour plus d'informations, reportez-vous au chapitre 20, Connecteurs et aux API ou à la documentation de votre API .

Et, à regarder de plus près mysqli, a trouvé le mysqli :: autocommit, mysqli :: rollback et mysqli :: engagent des méthodes de gestion d'une transaction (http://us.php.net/manual/en/class.mysqli.php).

Ma question: est-il préférable d'utiliser ces équivalents mysqli et pourquoi? Je ne trouve aucune mention nulle part qui dit si ou pourquoi ces fonctions fonctionnent mieux que leurs homologues SQL.

Répondre

5

Il est possible qu'il y ait des raisons pour lesquelles un wrapper d'accès aux données doit savoir quand une transaction a été démarrée/terminée. Par exemple, un schéma de regroupement de connexions devrait savoir quand une connexion précédemment utilisée était terminée au milieu d'une transaction, et ne pas la renvoyer au pool de connexions pour la réutilisation dans ce cas.

Je ne suis pas au courant de problèmes dans mysqli qui vous obligerait à utiliser la méthode native plutôt que la version SQL, mais c'est peut-être dans le cas général ... c'est pourquoi c'est seulement "parfois devrait". En tout cas, la méthode PHP est plus facile à lire que la version SQL-string, donc je dirais que ça va de toute façon.