[PHP]Récupérer le nom de la clé Primaire

Résolu
Mouradif Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -  
Dr Zoidberg Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde,

Je suis en train de coder un projet qui me tient à cœur et comme j'ai pas l'habitude de bosser en POO, j'ai créé une série de fonctions pour faciliter le code (surtout si d'autres membres veulent rejoindre l'équipe de développement). Dans ce cadre, j'aimerais savoir si il existe une fonction php qui récupère le nom de la clé primaire d'une table. Sinon, si quelqu'un peut me proposer un bout de code qui pourrait le faire. J'ai commencé comme ça :

<?php
function prim($table)
{
     $sql = "Select * from `$table` ;" ;
     $req = mysql_query($sql) ;

/*
Là, je récupere le premier enregistrement (ou peu importe lequel) de ma table sous forme de tableau
*/

     $data = mysql_fetch_array($req) ;

/*
Et là je ne sais pas quel fonction utiliser pour récupérer le nom de la première $key du array $data...
*/
}
?>


voilà, donc déjà pour savoir si une fonction mysql_ existe déjà en php pour récupérer le nom de la clé primaire d'une table, et à défaut, une fonction sur array qui récupère le nom de la première clé.

Merci d'avance à tous !
A voir également:

3 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Utilise describe:
http://dev.mysql.com/doc/refman/5.0/fr/describe.html

Un exemple avec une table qui s'appele machin:
$res = mysql_query('DESCRIBE machin');
$primary_key = '';
while($line = mysql_fetch_array($res))
{
    if($line['key'] == 'PRI'){
        $primary_key = $line['Field']; //Nom de la colonne concernée
        break;
    }
}
4
BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   159
 
Salut,

Je ne connais pas php mais je peux déjà te dire que tu n'arriveras pas à trouver le nom de la clé de la table comme ça. En effet, dans $data tu retrouves la valeur des champs de la table et pas la définition de la table elle-même
0
Mouradif Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   36
 
:D Merci beaucoup kilian, je ne conaissais pas la fonction DESCRIBE en SQL. Si j'ai bien compris, elle retourne le nom des champs d'une table ?

En fait, j'ai cherché parmi les fonctions sur les arrays et j'ai trouvé une solution plus simple.

D'abord, pour répondre à BlueMind, si tu fais un print_r de $data tu trouves
[0] => Valeur du champs 1
[Nom du champs 1] => Valeur du champs 1
[1] => Valeur du champs 2
[Nom du champs 2 => Valeur du champs 2
etc...

or, le fruit de mes recherches m'a mené à la fonction array_keys($array) qui agit comme DESCRIBE mais sur un array. Je fais :
$keys = array_keys($data);
print_r($keys)

Ca me donne :
[0] => 0
[1] => nom du champs 1
[2] => 1
[3] => nom du champs 2
[4] => 2
[5] => nom du champs 3

donc pour la fonction complète au cas où quelqu'un d'autre en aie besoin :
function primary($table)
	{
	$sql = mysql_query("select * from `$table`");
	$data = mysql_fetch_array($sql);
	$keys = array_keys($data);
	$prim = $keys[1];
	return $prim;
	}
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
$keys[1] ne te donnera pas necessairement la clé primaire. Ca marche peut peut être pour ta table mais ça peut ne pas marcher pour un autre. Tout dépend dans quel ordre tu as créé tes champs.
0
Mouradif Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   36 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
rhooo :D soit pas si rabat-joie !! en ce qui me concerne j'ai jamais mit de clé primaire en 3eme position sur une table ni rencontré quelqu'un qui le faisais et je suis sûr que toi même tu mets toutes tes clés primaires en première position dans la table.
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > Mouradif Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Ben ça arrive :-)
D'ailleurs elle doit être en deuxième position dans ta table, sinon ce serait $keys[0] :-)
0
Mouradif Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   36 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
bah non justement ! puisque $data ( qui est = mysql_fetch_array($sql)) est fait comme ca :

[0] -> valeur
[Nom du champ] -> valeur
[1] -> valeur2
[Nom du champ 2] -> valeur2

de façon à ce qu'on puisse utiliser $data[0] ou $data[nom_du_champ] invariablement.

$keys[0] contient donc "0" (toujours)
le nom du premier champs est dans $keys[1]
0
Dr Zoidberg Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   100 > Mouradif Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,

Une clé primaire n'est effectivement pas 'du tout' forcement en 1er et de plus elle peut être composée de plusieurs colonnes, ce n'est pas si rare.
Comme il a été dit il faut utiliser describe ou 'show columns' pour être propre.
0