2010-12-29 4 views
1

J'ai plus de trois requêtes MySql dans un script PHP déclenchées par une tâche planifiée. Si une requête rencontre une erreur, le script lance une exception et annule cette requête Mysql. Ça fonctionne bien.Mysql: ROLLBACK pour plusieurs requêtes

Toutefois, si la première requête fonctionne correctement, mais pas la deuxième requête, lancez une exception, elle annule la deuxième mais pas la première requête. J'utilise begin_trans(), commit et rollback() pour des requêtes individuelles, car il m'arrive de devoir annuler une requête, parfois toutes les requêtes. Est-il possible de restaurer une requête ou toutes les requêtes?

Merci à l'avance

MISE À JOUR:

Je l'ai travail, il n'y avait pas de problème avec dans begin_trans(), commit et rollback(), la configuration de connexion de base de données a été différente pour une requête à partir d'autres requêtes , code fou sans aucun commentaire !!!

Répondre

3

La seule chose qui doit être restaurée est une opération d'écriture (INSERT, UPDATE ou DELETE). Je suppose que vous utilisez le mot "requête" pour signifier autre chose qu'une opération SELECT.

Si vous voulez que plusieurs instructions SQL réussissent ou échouent ensemble, vous devez spécifier un transaction.

MISE À JOUR:

Maintenant, je suis confus; ce n'est pas étonnant que tu sois.

Une transaction est une proposition tout ou rien. Il me semble que vous confondez deux cas d'utilisation distincts: l'un où vous voulez une requête unique dans une transaction et l'autre où vous voulez plusieurs dans une transaction. La combinaison des deux vous déroute et, j'en suis sûr, vos utilisateurs. Si vous validez une transaction, vous ne pouvez pas la restaurer. Vous devrez donc vous décider: soit l'opération A fait partie de sa propre transaction, soit elle est groupée avec B, C et D dans une autre. Mais pas les deux.

+0

j'ai mis à jour ma question, jetez un oeil, j'utilise begin(), commit(), rollback() – bee

+0

je l'ai eu le travail, merci duffymo – bee

+0

Je préférerais un upvote et acceptant la réponse si elle vous a aidé à Faites-le travailler à vos remerciements. – duffymo

1

Une restauration est appliquée à toutes les requêtes dans la transaction en cours.

[edited après la mise à jour des questions]

MySQL ne supporte pas les transactions imbriquées il est donc tout ou rien affaire. Vous pouvez uniquement annuler toutes les requêtes dans une transaction ou valider toutes les requêtes (réussies).

1

Le type d'annulation que l'on obtient dépend entièrement de la façon dont on définit la transaction.

Et cela dépend du cas d'utilisation professionnel.

Questions connexes