Intercepter erreur et agir avec l'enregistrement touché

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Intercepter erreur et agir avec l'enregistrement touché

par Patriboom » 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.

par d0m » 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.

Intercepter erreur et agir avec l'enregistrement touché

par Patriboom » 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.