Intercepter erreur et agir avec l'enregistrement touché

Mammouth du PHP | 881 Messages

06 févr. 2008, 05:05

Bonjour!

Voici la structure de ma table:

Code : Tout sélectionner

CREATE TABLE `paroisses_coordonnees` ( `id_coord` int(11) NOT NULL auto_increment, `adresse` varchar(40) NOT NULL, `ville` varchar(30) NOT NULL default 'Saint-Georges', `code_post` varchar(7) NOT NULL default 'G5Y', `Telephone1` varchar(20) NOT NULL default '(418) ', `Telephone2` varchar(20) NOT NULL default '(418) ', `Telephone3` varchar(20) NOT NULL default '(418) ', `paroisse_id` int(11) NOT NULL default '1', `Courriel` varchar(40) NOT NULL, `Notes1` text NOT NULL, PRIMARY KEY (`id_coord`), UNIQUE KEY `Adresses` (`adresse`,`ville`,`Telephone1`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Les adreses pour plusieurs' AUTO_INCREMENT=1304 ;
Comme vous voyez, il y a une clef unique qui empêche d'avoir deux fois le même numéro de téléphone. C'est amusant et pratique, mais pas tout le temps.

Lorsque je demande un UPDATE ou un INSERT (bien sûr après avoir vérifié l'existence préalable d'un enregistrement semblable), les résultats ne sont pas prévisibles et stables.

Ce que je veux faire, c'est intercepter le code d'erreur (habituellement, c'est le 1062 (doublon sur la clef 2). Ok, j'utilise mysql_errno()

Mais je veux continuer à apporter mes modifications. Or, pour cela, j'ai besoin de savoir avec quel enregistrement ma commande entre en conflit.

En bref, après provocation d'une erreur (disons 1062), je veux récupérer id_coord de l'enregistrement existant. Comment faire?

Puis-je trouver une fonction du style mysql_insert_id?
Ou encore, puis-je faire mysql_errno(id_coord)?


Merci à l'avance.
Soyez artisans de paix

d0m
Mammouth du PHP | 1141 Messages

06 févr. 2008, 09:50

La seule solution va être de faire toi même une requete de selection sur l'identifiant si la requete a échouée.

Par contre pour traiter la source du problème, si tu as un mysql de version 4 ou supérieure, tu peux utiliser ce genre de requete :

Code : Tout sélectionner

INSERT INTO paroisses_coordonnees (adresse,ville,...,Telephone1,...) VALUES ('ladresse','laville',...,'num_telephone',...) ON DUPLICATE KEY UPDATE code_post='75800',....;
qui va insérer si la clé n'existe pas et mettre à jour si la clé existe.

Mammouth du PHP | 881 Messages

06 févr. 2008, 17:45

Très intéressant.

Comme tu dis, ça ne résout pas mon problème, mais - mine de rien - ça en résout un autre.

Merci.
Soyez artisans de paix