Florynth
Messages postés48Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention 7 février 2008
-
15 juil. 2006 à 22:26
Florynth
Messages postés48Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention 7 février 2008
-
19 juil. 2006 à 13:36
Bonjour, très simple,
je veux faire un update dans une base de donnée MySQL et si l'enregistrement n'existe pas je veux l'inséré... Je suis capable de faire quelque chose (genre faire un SELECT et puis vérifier si il y a un retour, si oui Update sinon Insert) mais je veux que ça soit le plus efficace possible. On peux pas se servir de mysql_affected_rows() parce que si le update ne modifie rien ça retournera 0 même si l'enregistrement existe...
L'autre moyen que j'ai pensé c'est de faire un Insert si il y a un erreur mysql qui dit "duplicate value on index" je fais un Insert, je crois que c'est le moyen le plus propre (mon professeur de BD Oracle ma toujours dit que faut pas faire des tests préléminaires, c'est le système de BD qui doit le faire et nous on gère les erreurs...) mais je me demandais si il y a avais une solution plus adéquate.
Florynth
Messages postés48Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention 7 février 2008 19 juil. 2006 à 13:36
Merci de votre aide,
J'ai trouvé aussi la commande REPLACE au lieu de UPDATE qui détruit l'enregistrement et le remplace par les nouvelles données. Pas besoin de spécifié de where car il le fait ou sont la PRIMARY KEY.
Mais je n'ai pas retenu cette option (je vous la donne à titre d'info) explication :
Les valeurs de `column4` et `column5` seront perdu car la command REPLACE fait un DELETE avant sur la PRIMARY KEY et INSERT ensuite.
Je ne suis pas arrêté sur mon choix mais je crois que le INSERT avec la gestion d'erreur reste la meilleur solution. Je ne vois pas quel cas exactement (j'ai pas trop le temp de réfléchir d'en dévellopé un présentement) mais si le mysql_num_rows retourne 0 et que je fais un INSERT et qu'il y a une erreur et bien je ne fera pas de UPDATE à moins de tester l'erreur, donc tant qu'à tester l'erreur par la suite aussi bien le faire au début !
Et pour répéter une fois de plus ce que mon prof de BD disait :
"Il ne faut pas faire des tests préléminaires, c'est le système de BD qui doit le faire et nous on gère les erreurs..."