Version complète: sur le forum Webmaster Hub : SQL et LAST_INSERT_ID
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net
superaldoisdead
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:

CODE
$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
Portekoi
Bonjour,

Est ce que ton champ est bien en AUTO_INCREMENT ?


Portekoi
Jeromnimo
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...)
Kent
CITATION
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é

CODE
$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
CODE
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.
superaldoisdead
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.gif , 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:

CODE
$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!!
Kent
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 sad.gif
superaldoisdead
Merci Kent de ta reponse!!

Je vais regarder ton lien tout de suite!!
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.