|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : juin 2004 Messages : 247 ![]() |
Bonjour,
Je souhaite executer plusieurs requetes SQL (update) mais je veux executer celles-ci seulement si aucune ne retournent d'erreurs. Si un update n'a pas été bien executé, je ne souhaite pas que les autres soit executés, et je veux afficher un message d'erreur. Je ne sais pas si cette question est à sa bonne place (peut etre que c'est gerable uniquement en mysql en créant des procédures ou je ne sais quoi...) Merci pour vos réponses ! |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Peut-être que c'est gérable par MySQL, avec des trucs comme les requêtes transactionnelles (commit) ou les requêtes stockées, je ne sais pas.
Si tu veux le gérer par PHP, tu peux faire quelque chose de simple, comme ça : Code :
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : juin 2004 Messages : 247 ![]() |
Oui je suis d'accord, mais si la requete 3 s'est mal passée, je voudrais pas que la requete 1 s'execute. Je pourrais traiter le cas dans le else et revenir à l'état d'origine, mais c'est un peu galere et puis pas très optimisé... je serai obligé de refaire un update.
|
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Inscription : juin 2002 Messages : 1 013 ![]() |
tu n'es pas compliqué
donc si 1 se passe bien, tu fais 2, si 2 se passe bien, tu fais 3, et si 3 se passe mal, tu ne veux pas faire 1, ni 2, déjà exécutés. je te dirais, commence par 3, mais je suppose que cela ne convient pas du tout dans ta logique. et sincèrement, je ne sais pas comment tu peux régler cela logiquement : si j'ai compris ta question, il suffit que l'une de tes requetes s'exécute mal pour qu'aucune ne doit être exécutée. Pourtant, il faudra bien que tu commences par l'une de ces requêtes. Et dès qu'elle sera exécutée, ce sera fait. A mon avis ton problème est insoluble Enfin, en php. Avec des requêtes transactionnelles ou requêtes stockées, peut-être, je n'y connais rien. Pose ta question dans le forum mysql Sinon, tu peux les exécuter dans une table tampon et s'il n'y a aucune erreur les exécuter dans ta table de base. Ainsi, si erreur, cela évitera des update des infos antérieures à ta requête, que tu n'as peut-être pas en mémoire. Mais en vitesse d'exécution, je ne suis pas persuadé que ce soit une bonne chose. |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 1 249 ![]() |
C'est parfaitement possible avec les transactions dans MySql.
Attention, il faut que tu choisisses une table de format InnoDB, car les tables MyIsam (format par défaut) ne supportent pas les transactions. Les transactions sont prévues exactement pour ton problème : c'est du tout ou rien => soit tout a fonctionné et les changements sont validés, soit il y a une erreur, et tout est annulé. Plus de renseignements dans le forum mysql. |
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : juin 2004 Messages : 247 ![]() |
Arf..! Je crois pas avoir le choix du type de base. Elles ont déjà été créés et je suis pas le seul sur le projet. J'ai peur que le fait de modifie rle type de la base modifie d'autres choses.
En Perl, il me semble que cela est possible (je suis meme sur puisque je l'ai utilisé). En fait la fct magique que j'attendais était une sorte de mysql_query ou on pourrait mettre plusieurs requetes en paramètres, et executer les requetes seulement si toutes sont executables. Si une requete aurait rencontré un pb, aucune n'aurait été executée et le mega mysql_query aurait renvoyé faux. Bon bah je crois que je vais essayer de trouver une autre solution pour mon problème... |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 1 249 ![]() |
Je ne te parle pas du type de base mais tu type de table. Le choix de InnoDB aura juste un petit impact sur certaines performances, mais toutes les fonctionnalités des tables MyIsam s'y retrouvent, plus les transactions et les procédures stockées. Tu n'as donc normalement aucun risque de choisir une table InnoDB. C'est la seule solution valable pour réaliser des transactions.
Au passage, avec php5, je te conseille d'utiliser les PDO, qui gère les transactions même si la version de mysql ne les autorise pas. |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 1 249 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 | |
|
Membre régulier
![]() Inscription : juin 2004 Messages : 247 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com