Pb : trigger => resolu

Eléphant du PHP | 90 Messages

05 mai 2010, 16:31

Bonjour,

J'ai un petit problème avec un trigger et je vois pas le problème je demande donc votre aide :)
create trigger montrigger
 after insert on  matable for each row
begin
  update matable set numint = 'zzz' where nom =:new.nom;
end;
j'aimerai que mon trigger remplisse le champ numint apres un insert to matable .....

voici le message d'erreur que l'on me renvoie
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near :new.nom line 4

merci de votre aide

Martin

ps: je suis sur linux avec LAMP et phpmyadmin d'installé
Modifié en dernier par marvllt le 10 mai 2010, 08:33, modifié 1 fois.

Eléphanteau du PHP | 21 Messages

06 mai 2010, 11:52

salut 8-)

Je suis pas absolument persuadé mais ça me parrait etrange les 2 points devant le new, as tu essayé sans ?

Eléphant du PHP | 90 Messages

07 mai 2010, 09:29

Merci pour ta réponse

effectivement il aime pas le ":"

voici mon trigger maintenant
delimiter //
CREATE TRIGGER mon trigger AFTER INSERT ON matable
FOR EACH ROW
BEGIN
		UPDATE matable SET numint = SUBSTRING(new.nom,1,3) where nom= new.nom;
END//
delimiter ;
il n'y a plus d'erreur que je veux le mettre avec phpmyadmin mais maintenant les insert ne marchent plus :(

voila l'erreur qui s'affiche
#1062 - Duplicate entry '' for key 'PRIMARY'
a savoir que numint est une clef primaire

merci de votre aide

Eléphant du PHP | 74 Messages

09 mai 2010, 02:04

Bonjour,

Tu dois avoir une ligne avec numint à vide dû a tes précédentes insertions sans triggers. Si tu modifies cette ligne, ça devrait être bon.

En regardant ce que tu fais, je me demande si ton trigger est utile ?! tu pourrais remplir numint directement lors de l'insert vu que tu utilises le champ nom
:?:

Eléphant du PHP | 90 Messages

10 mai 2010, 08:30

effectivement en supprimant les anciennes insertions ça marche :D !!

j'ai quand même fait des modifications voila la derniere version de mon trigger
delimiter //
CREATE TRIGGER ajout_sigle before INSERT  ON intervenants FOR each row   
begin
SET new.numint=SUBSTRING(new.nom,1,3) ;
END//
delimiter ;
et pour répondre à ta question datesta j'ai créé une fonction d'insertion sur mon site j'ai plusieurs formulaire pour remplir mes tables et ma fonction va chercher les élements dans les formulaire a remplir.
comme c'est une fonction pour remplir n'importe quelle table et que ce trigger concerne qu'une table je ne peux pas faire l'action dans mon code php en tout cas je ne vois pas comment faire :D

merci a tous pour votre aide