Y a-t-il un moyen de récupérer les noms des colonnes d'une table en MySQL en utilisant PHP?
DESCRIBE est en fait un raccourci pour SHOW COLUMNS (dev.mysql.com/doc/refman/5.0/fr/describe.html)
Y a-t-il un moyen de récupérer les noms des colonnes d'une table en MySQL en utilisant PHP?
Vous pouvez utiliser DESCRIBE:
DESCRIBE my_table;
Ou dans les nouvelles versions, vous pouvez utiliser INFORMATION_SCHEMA:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Ou vous pouvez utiliser SHOW COLUMNS:
SHOW COLUMNS FROM my_table;
Ou pour obtenir les noms de colonnes avec une virgule sur une ligne:
SELECT group_concat(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
DESCRIBE est en fait un raccourci pour SHOW COLUMNS (dev.mysql.com/doc/refman/5.0/fr/describe.html)
Je voterais pour la version Information_Schema, car cette syntaxe est prise en charge par la plupart des bases de données majeures. Il vaut mieux ne d'apprendre qu'une seule méthode si possible.
Les déclarations SQL suivantes sont presque équivalentes :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
[AND table_schema = 'db_name']
[AND column_name LIKE 'wild']
SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE 'wild']
Référence : INFORMATION_SCHEMA COLUMNS
J'ai créé une fonction PDO qui renvoie tous les noms de colonnes dans un tableau simple.
public function getColumnNames($table){
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
try {
$core = Core::getInstance();
$stmt = $core->dbh->prepare($sql);
$stmt->bindValue(':table', $table, PDO::PARAM_STR);
$stmt->execute();
$output = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$output[] = $row['COLUMN_NAME'];
}
return $output;
}
catch(PDOException $pe) {
trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
}
}
La sortie sera un tableau :
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Désolé pour la nécro mais j'aime ma fonction ;)
P.S. Je n'ai pas inclus la classe Core mais vous pouvez utiliser votre propre classe.. D.S.
Cette solution est issue de la ligne de commande mysql
mysql>USE information_schema;
Dans la requête ci-dessous, remplacez simplement <--DATABASE_NAME--> par le nom de votre base de données et <--TABLENAME--> par le nom de votre table où vous voulez simplement les valeurs de champ de l'instruction DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
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.