Aller au contenu

SQL et LAST_INSERT_ID


superaldoisdead

Sujets conseillés

bonjour!!

voila mon probleme, débutant en SQL je ne sais pas trop comment faire cela:

Quand j'insere dans une table, jai besoin qu'une insertion se fasse dans une autre table au meme moment.

Par exemple: jai ma table acteur (idAct, nom), la table video (idVid, URL) et la table d'association assoc (idAct, idVid)

quand j'insere une nouvelle video, il faut ke jmette a jour la table d'association.

J'ai essayé de reprendre l'idVid que je viens d'inserer grace a LAST_INSERT_ID mais ca me renvoie 0 a chaque fois!! Pourtant jai bien un INSERT suivi de LAST_INSERT_ID:

$req = "INSERT INTO video
VALUES ('', '$URL')";
$res = mysql_query($req);

$mysql_id = mysql_query("SELECT LAST_INSERT_ID()");

On ma dit d'essayer de le faire dans un trigger, car les deux instructions se suivrait et seraient entourées de BEGIN et END, est que cest ca quil faut faire??

Y a t-il une autre solution??

Merci a tous

Superaldoisdead

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

as-tu vérifié que ton INSERT se déroulait correctement ?

Normalement, si tu as un champ id en auto increment, tu ne devrais pas préciser le ' ' pour ta première valeur...

De plus, si ce champ est défini comme clé primaire, tu devrais te faire jeter, en te disant que la contrainte d'unicité de la clé primaire n'est pas respectée... (vu que tu insères à chaque fois ' ' dans ta première colonne...)

Lien vers le commentaire
Partager sur d’autres sites

quand j'insere une nouvelle video, il faut ke jmette a jour la table d'association.

pour l'idvideo tu mets l'idvideo just inséré mais pour l'acteur ?? tu le spécifie manuellement ?

sinon pour récuperer l'id just inseré

$req = "INSERT INTO video
VALUES ('', '$URL')";
$res = mysql_query($req);

$id_justinsere_video = mysql_insert_id();
mysql_query("INSERT INTO assoc VALUES('$id_justinsere_video')");

et pour faire ça avec un trigger (mysql 5 minimum)

dans phpmyadmin tu execute ça

CREATE TRIGGER ajout_auto_dans_asso 
AFTER INSERT ON video
FOR EACH ROW INSERT INTO asso VALUES(new.idVid);

en supposant que ta table asso ne contient qu'un champs idVid et que celui-ci n'est pas en auto-incrément évidemment.

Bon courage.

Modifié par Kent
Lien vers le commentaire
Partager sur d’autres sites

merci de vos reponses!!

Portekoi:

Oui mon champ est bien en auto_increment

Jeromnimo:

Mon INSERT se deroule sans problemes, préciser '' pour un champ auto_increment ca marche, et les valeurs de ces champs sont l'auto_increment et non ''

Mais la jai honte :whistling: , en fait je testais directement dans phpmyadmin je faisais en fait les requetes l'une apres l'autre mais en fait il fallait copier les deux requetes séparées par un point virugle mais ca me fait poser une nouvelle question:

$req = "INSERT INTO video
VALUES ('', '$URL')";
$res = mysql_query($req);

if($res = TRUE){
$mysql_id = mysql_query("SELECT LAST_INSERT_ID()");

est ce que ce que LAST_INSERT_ID() me renverra bien ce quil faut dans ce code. Mes requetes se suivent dans le code PHP mais est ce quelles se suivront apres dans le serveur qui gere la BDD??? Oui vu que je copiais directement mes deux requetes dans phpmyadmin pour les tester! La ca sera peut etre plus pareil,??

Merci a tous

Superaldoisdead

Merci de ta reponse Kent!! Un trigger me permet donc de gerer ca sans le gerer dans le code php??

oui, l'id de l'acteur sera spécifié manuellement!!

Lien vers le commentaire
Partager sur d’autres sites

Théoriquement oui je ne vois pas le soucis. Cependant voici ce que j'ai trouvé sur cette page http://fr.php.net/mysql_insert_id

Attention

mysql_insert_id() convertit le type de valeur retourné par la fonction C de MySQL C mysql_insert_id() en type PHP long (appelé int en PHP). Si votre colonne de type AUTO_INCREMENT est une colonne de type BIGINT, la valeur retournée par mysql_insert_id() sera incorrecte. À la place, utilisez la fonction interne MySQL LAST_INSERT_ID() dans une requête SQL.

D'ailleurs dans les commentaires laissé sur cette page il y a des fonctions toutes prêtes pour récuperer le dernier id inseré. Je t'invite à les consulter en cas de doute.

_________________

Oui un trigger te permet de gerer ça tout seul au niveau de la base de donnée sans utiliser php, mais l'utilisation de trigger requiert le droit "SUPER" sur ta base de donnée et tout les hebergeurs ne le donne pas :(

Modifié par Kent
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...