2012-07-22 5 views
0

J'ai une base de données avec un champ d'incrémentation automatique. Je veux récupérer la valeur de la colonne Auto increment chaque fois que j'insère un enregistrement dans la base de données. J'utilise mysql comme base de données et PHP comme langage de programmation. J'ai essayé d'utiliser la fonction mysql_insert_id() mais cela ne convient pas quand il y a un grand nombre d'insertions se déroulant au même moment. Je veux récupérer la valeur de la colonne AI parce que je stocke un fichier pour l'enregistrement respectif et comme je stocke les fichiers dans un seul répertoire j'ai besoin que le nom du fichier soit unique. Un autre moyen de faire la même chose?Récupère l'ID d'incrémentation automatique de la base de données mysql

Répondre

2

Il doit être sûr pour vous d'utiliser mysql_insert_id(), car elle retourne la dernière valeur AI Inséré de la connexion actuelle (voir php.net). Donc, tant que vous appelez la méthode juste après la requête INSERT dans votre script, il n'y aura pas de conditions de concurrence, même si votre script s'exécute simultanément plusieurs fois.

+0

C'est exactement ce que je cherchais. Merci de votre aide. :) – KOR

0

Utilisez uniqid() pour le nom de fichier. "Obtient un identifiant unique préfixé basé sur l'heure actuelle en microsecondes."

Jetez un oeil ici php.net/manual/en/function.uniqid.php

+0

Merci. Cela m'a vraiment aidé. – KOR

1

pour un seul insert, vous pouvez le faire en une seule statementto vous assurer d'obtenir la bonne valeur

Pseudo Code:

$query = "INSERT INTO TABLE1 VALUES(null, 'test')"; 
$id = mysql_execute("$query; SELECT LAST_INSERT_ID();" 

Une autre façon pourrait être de manuelly Ids.

disons que vous voulez ajouter 1000 lignes

1. query current ai value and store value 

2. alter table set ai value = current + 1000; 

3. make your inserts with setting ai value manually 

    INSERT INTO TABLE1 VALUES ($id, 'test$id'); 
0

Une autre façon de récupérer l'ID du dernier insert en utilisant SQL:

SELECT id FROM table ORDER BY id DESC LIMIT 1 
+0

'SELECT MAX (id) FROM table;' est plus court et sans tri. –

+0

Cette méthode est dangereuse lorsque la connexion simultanée insère ses propres lignes. –

+0

mais c'est une déclaration SQL supplémentaire, et il a déjà dit qu'il est préoccupé par la performance. – Nikola

Questions connexes