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

Résolu/Fermé
Mouradif Messages postés 26 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 5 novembre 2019 - 27 juin 2008 à 16:15
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 - 28 juin 2008 à 23:30
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
27 juin 2008 à 16:32
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 vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 159
27 juin 2008 à 16:27
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 26 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 5 novembre 2019 36
28 juin 2008 à 01:45
: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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 juin 2008 à 02:42
$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 26 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 5 novembre 2019 36 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
28 juin 2008 à 14:47
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > Mouradif Messages postés 26 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 5 novembre 2019
28 juin 2008 à 15:01
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 26 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 5 novembre 2019 36 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
28 juin 2008 à 22:48
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 jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100 > Mouradif Messages postés 26 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 5 novembre 2019
28 juin 2008 à 23:30
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