Ajout dans 2 tables lorsque les 2 requêtes se sont bien déroulées

boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008 - 17 août 2007 à 19:58
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 18 août 2007 à 13:36
Bonjour,

je vous exeplique mon problème:
J'ai 2 tables avec chacunes un champs 'id' en auto_increment.
Je souhaite insérer des informations dans chacune d'elles, mais seulement lorsque les 2 requêtes INSERT se sont déroulées comme il faut.
Il s'agit plus d'une sécurité que je veux mettre en place.
Car si par exemple, un des ajouts ne se fait pas correctement, les 'id' ensuite seront décalés, et celà ne me convient pas pour les futures recherches (SELECT).

Merci.

10 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
17 août 2007 à 20:04
Hello,

if(mysql_query('INSERT INTO.....')){
    le reste
}

--> comme ça "le reste" n'est exécuté que si le INSERT est ok.
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
17 août 2007 à 21:42
Salut,

en fait, c'est ce que je pensais faire, mais si la deuxième requête plante, ça aura quand même enregistré dans la première... et ça, c'est pas bon !

c'est à ça que tu pensais ?

if(mysql_query('INSERT INTO 1ère table')){
    mysql_query('INSERT INTO 2ème table');
}

mais je pense pas que ça marche (car si la deuxième requête plante...)
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
17 août 2007 à 22:09
Ha ok.

Mais là t'es bloqué, c'est pas trop possible. Tu dois bien avoir moyen de tester si la requête va marcher avant de la faire non ? Pourquoi penses-tu qu'elle planterait ?

Sinon tu as le Rollback de mysql qui te permet d'annuler une requête, mais bon c'est un peu sale je trouve dans ton cas.
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
17 août 2007 à 22:53
Bloqué...sniff
Je ne sais pas pourquoi elle planterait, mais je me dis, qu'il y a une chance (enfin... une malchance) qu'une requête plante...
Je me demande comment font les autres sites !

je vais creuser le Rollback,

Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
17 août 2007 à 23:14
Une requête ne plante pas ! sauf si ses arguments sont mauvais, mais ça c'est à toi de vérifier avant de faire cette requête. Ou alors ça plante s'il y a une panne de courant en plein milieu de la requête, mais ça ce serait vraiment pas de bol dis donc.
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
17 août 2007 à 23:18
Il existe aussi quelque conditions dans le langage sql mais je ne sais pas si tu arriveras à en tirer quelque chose :

http://dev.mysql.com/doc/refman/5.0/fr/control-flow-functions.html
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
17 août 2007 à 23:39
Merci, je vais regarder ça ;)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 août 2007 à 00:49
Salut

sur les tables innodb (je crois) t'as le systeme des transactions, si ca peut t'aider...

<hr />une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
18 août 2007 à 09:25
Merci, mais je crois qu'il n'y a pas de système de transition en MySQL, si ?
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 août 2007 à 13:36
Salut

je viens de parler des tables innodb

http://www.google.fr/search?q= innodb&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:official&client=firefox-a

en tapant juste innodb sur google, on obtient :

Innobase is the developer of InnoDB , the leading transactional storage engine for the MySQL open source database.

...

Manuel PHP : Présentation des tables InnoDB - La référence en ...
InnoDB
fournit à MySQL un gestionnaire de table transactionnelle (compatible
ACID ), avec validation (commits), annulations (rollback) et capacités
de ...
www.manuelphp.com/mysql/innodb-overview.php - 38k - <nobr>=cache:EVfZTSUG78AJ:www.manuelphp.com/mysql/innodb-overview.php+innodb&hl= fr&ct=clnk&cd=2&gl=fr&client=firefox-a En cache - Pages similaires</nobr>

...

MySQL AB :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 14.2 The ...
- [ =fr&sl= en&u=http://dev.mysql.com/doc/refman/4.1/en/innodb.html&sa=X&oi=translate&resnum=3&ct=result&prev=/search%3Fq%3Dinnodb%26hl%3Dfr%26client%3Dfirefox-a%26rls%3Dcom.ubuntu:en-US:official%26hs%3DdPM Traduire cette page ]14.2.1 InnoDB Overview ». Section Navigation [Toggle]. 14 Storage Engines · 14.1 The MyISAM Storage Engine; 14.2 The InnoDB Storage Engine ...
dev.mysql.com/doc/refman/4.1/en/innodb.html - 15k <nobr>=cache:bFsqgTY3mskJ:dev.mysql.com/doc/refman/4.1/en/innodb.html+innodb&hl=fr&ct=clnk&cd=3&gl=fr&client=firefox-a En cache - Pages similaires

</nobr><hr />une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
Rejoignez-nous