Précédent   Forum des professionnels en informatique > PHP > Langage > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc. pour PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2006, 11h43   #1
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
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 :
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 !
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 12h11   #2
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
(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 ?
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 20h01   #3
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
dans le cas ou c'est pas apres y'a pas de méthodes toute faite
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 23h15   #4
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
Citation:
dans le cas ou c'est pas apres y'a pas
il n'y a pas non plus d'interet
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2006, 22h00   #5
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
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
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 03h50   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 10h09   #7
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
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 :
SHOW TABLE STATUS LIKE 'ma_table'
On récupère ainsi directement la bonne table, et on cherche l'autoincrément dans les infos
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 12h18   #8
Futur Membre du Club
 
Inscription : avril 2006
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 38
Points : 18
Points : 18
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é.
Jukien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2009, 04h03   #9
Invité de passage
 
Inscription : mars 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 20
Points : 4
Points : 4
Par défaut mix

Un petit de-terrage mais pour ceux qui cherchent, un mix des solutions proposé
Code :
1
2
 
SELECT MAX( LAST_INSERT_ID(ID)) as last_id FROM `ma_table`
OU
Code :
1
2
 
SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'ma_table'
Tmex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2009, 11h13   #10
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
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)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h04.


 
 
 
 
Partenaires

Hébergement Web