93 votes

PHP: Obtenir la clé primaire de la table?

Existe-t-il un moyen d'obtenir le nom du champ de clé primaire à partir de la base de données mysql? Par exemple:

J'ai une table comme celle-ci:

 +----+------+
| id | name |
+----+------+
| 1  | Foo1 |
| 2  | Foo2 |
| 3  | Foo3 |
+----+------+
 

Où l'ID de champ est la clé primaire (il a une incrémentation automatique mais je ne peux pas l'utiliser). Comment puis-je récupérer les champs nommés "id" dans php?

154voto

alexn Points 25639

Une meilleure façon est d'utiliser SHOW KEYS car vous n'avez pas toujours accès à information_schema. Les oeuvres suivantes:

 SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
 

Column_name contiendra le nom de la clé primaire.

36voto

Svetlozar Angelov Points 10583

Voici le nom de la colonne de la clé primaire

 SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
  AND t.table_schema='YourDatabase'
  AND t.table_name='YourTable';
 

22voto

Roland Bouman Points 15226
SELECT kcu.column_name
FROM   information_schema.key_column_usage
WHERE  table_schema = schema()             -- only look in the current db
AND    constraint_name = 'PRIMARY'         -- always 'PRIMARY' for PRIMARY KEY constraints
AND    table_name = '<your-table-name>'    -- specify your table.

8voto

v1rus32 Points 21

utilisation:

 show columns from tablename where `Key` = "PRI";
 

2voto

Benoit Vidis Points 2375

Pour une approche PHP, vous pouvez utiliser mysql_field_flags

 $q = mysql_query('select * from table limit 1');

for($i = 0; $i < mysql_num_fields(); $i++)
    if(strpos(mysql_field_tags($q, $i), 'primary_key') !== false)
        echo mysql_field_name($q, $i)." is a primary key\n";
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X