Récupérer les id d'une requete d'insertion etendue?

scrat
Invité n'ayant pas de compte PHPfrance

14 févr. 2006, 18:49

Hello,

je voulais savoir s'il existait un moyen de récupérer les id (auto_increment) générés lors d'une requete d'insertion étendue genre:

Code : Tout sélectionner

INSERT INTO table (id, nom) VALUES (NULL, 'nom1'), (NULL, 'nom2'), (NULL, 'nom3'),
Car je fais des insertion de masses et ce genre de requête est bien plus rapide à l'execution.

Merci d'avance ;)

Mammouth du PHP | 19672 Messages

15 févr. 2006, 01:12

Si tu utilises MySQL, regarde du coté de mysql_insert_id()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
fab
ViPHP | 2657 Messages

15 févr. 2006, 01:40

Dailleurs question un peu hors sujet, mais ça me trouble
Imaginons on est pendant l'éxécution d'un script ( S )on effectue un requete ( A ) un peu plus loins dans ce script on utilise la fonction mysql_insert_id() ( B )qui va donc nous retourner l'auto incrément apres la requete A. Mais si pendant le labs de temps ( aussi minime soit t'il ) qui sépare A et B un truc script completement indépendant de celui là a lui aussi fait un insert sur la meme table ( C ) il aura donc modifier la valeur de l'auto increment.
La question est lors de l'appel de B dans le script S ça sera la valeur apres A ou apres C qui sera retourné ???

Si je suis pas clair faut le dire, il est tard j'ai une escuse :p
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

15 févr. 2006, 02:59

Le last_insert_id est maintenu "on a per-connection basis", donc ce sera la valeur comprise entre A et C.

scrat
Invité n'ayant pas de compte PHPfrance

15 févr. 2006, 10:44

merci mais mysql_insert_id() renvoit un entier donc un seul id. D'après mes test il me renvoi le premier id de la requete etendue... Il faudrai pouvoir récupérer tous les id générés... :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 févr. 2006, 11:05

Ce serait à confirmer, mais je pense qu'il fonctionne par session de connexion... en gros, avec mysql_insert_id, tu ne dois pas pouvoir récuperer les id des enregistrements qui ont été fait sous une autre "session" que la tienne.

Ce n'est que de la théorie, mais je pense que cela fonctionne comme suit :

A insère l'id 1
B insère l'id 2
Si A interroge mysql_insert_id, il retourne 1
Si B interroge mysql_insert_id, il retourne 2

A insère l'id 1
B insère l'id 2
A insère l'id 3
Si A interroge mysql_insert_id, il retourne 3
Si B interroge mysql_insert_id, il retourne 2