IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

[MySQL] Récupérez la valeur de l'autoincrement d'une table [Sources]


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut [MySQL] Récupérez la valeur de l'autoincrement d'une table
    Cette source permet de récupérer la valeur de l'auto increment d'une table, une question récurente posé par de nombreux codeurs (moi le premier)

    Je la fournis avec ma fonction de gestion des erreurs SQL ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    	function SQL_Error($query, $error, $line)
    	{
    		$log_file = fopen("log.txt","a+");
    		$result = '['.date("d-m-Y H:i:s").']|'.$_SERVER['PHP_SELF'].'|'.$query.' : '.preg_replace("#([0-9]+)$#", $line, $error).'\n' ;
    		//Pour le Debugage écran
    		echo $result;
    		/* Pour le Debugage dans un fichier de log
    		Écriture dans le fichier log
    		fwrite($log_file, $result);
    		fclose($log_file);
    		*/
    		exit();
    	}
     
     
    	//On Regarde les 'table status'
    	$query = 'SHOW TABLE STATUS';
    	$result = mysql_query($query) or SQL_Error($query, mysql_error(), __LINE__);
    	//On parcoure les ligne de resultats
    	while( $infos_tables = mysql_fetch_array($result) )
    	{
    		//Si le nom de la table $infos_tables[0] == au nom de la table dont vous voulez l'autoincrement ...
    		if( $infos_tables[0] == $db_table )
    			$_SESSION['id'] = $infos_tables[10];
    	}
    Poster vos critiques !

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    (Je ne commente pas ton code je ne l'ai pas regardé, j'apporte juste une précision)

    Dans le cas où c'est juste après une insertion, il y a beaucoup plus simple :
    Comment connaître l'id auto_increment de mon dernier ajout ?

  3. #3
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut
    dans le cas ou c'est pas apres y'a pas de méthodes toute faite

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    dans le cas ou c'est pas apres y'a pas
    il n'y a pas non plus d'interet

  5. #5
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par jeff_!
    il n'y a pas non plus d'interet
    peut etre que tu n'en vois pas ... mais pour moi il y en a un, je genere des formulaire directement depuis ma base de donnée en php... avoir la valeur de l'id auto incrementé permet d'afficher l'id sous lequel ça sera enregistrer meme si c'est pas celui récupéré qui servira

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je vois mal l'intérêt de récupérer un identifiant qui ne sera pas utilisé dans 100% des cas... Si c'est juste pour information utilisateur, c'est fondamentalement inutile (en plus d'induire en erreur) ; si c'est pour utiliser ce numéro, c'est absurde puisqu'il a de grandes chances de changer avant d'être utilisé. Dans tous les cas, l'intérêt est effectivement réduit.

    Par ailleurs, ton code ne fonctionne que pour les tables dont le champ auto_increment est appelé "id", ce qui est fréquent mais pas systématique.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ce code est bon, (j'ai cru avoir besoin de cette fonction une fois, mais finallement j'ai pu me débrouiller sans ) mais imagine que la base possède 1000 tables ...
    Un peu longue la boucle non?

    Pk ne pas faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW TABLE STATUS LIKE 'ma_table'
    On récupère ainsi directement la bonne table, et on cherche l'autoincrément dans les infos

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Et pourquoi pas tout simplement un

    SELECT max(id) FROM ma_table

    ?



    Edit : J'ai dit une bétise, ça ne fonctionnera pas si le dernier enregistrement a été supprimé.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 13
    Points
    13
    Par défaut mix
    Un petit de-terrage mais pour ceux qui cherchent, un mix des solutions proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX( LAST_INSERT_ID(ID)) as last_id FROM `ma_table`
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'ma_table'

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    J'ai modifié le titre pour préciser MySQL, car certaines fonctions dépendent du moteur de base de données, LAST_INSERT_ID par exemple.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

Discussions similaires

  1. Récupérez des valeurs de la Bdd dans une listBox (MVC3)
    Par Fra212 dans le forum Entity Framework
    Réponses: 4
    Dernier message: 28/02/2012, 13h22
  2. Réponses: 1
    Dernier message: 04/05/2010, 11h47
  3. Modifier la valeur d'un champs dans une table mysql en fonction du temps.
    Par VaSss dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/05/2010, 11h30
  4. [Mysql] Récupérer la valeur du champ autoincrement
    Par Hell dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/10/2006, 11h33
  5. Réponses: 4
    Dernier message: 07/08/2006, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo