Existe-t-il un moyen de récupérer le nom des colonnes d'une table dans mysql? en utilisant php
Existe-t-il un moyen de récupérer le nom des colonnes d'une table dans mysql? en utilisant php
Réponses:
Vous pouvez utiliser DESCRIBE :
DESCRIBE my_table;
Ou dans les versions plus récentes, 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;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
desc my_table;
:-)
DESC
pour décrire peut être facilement confondu avec DESC
pour descendre. Le nombre nominal d'octets que vous enregistrez pour le manque de lisibilité n'en vaut pas la peine.
Les instructions 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
SHOW COLUMNS
retourne un tableau contenant les noms de colonne, les types, etc., tandis que SELECT COLUMN NAME
renvoie uniquement les noms de colonne.
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;)
PS Je n'ai pas inclus la classe Core mais vous pouvez utiliser votre propre classe .. DS
Cette solution provient de la ligne de commande mysql
mysql>USE information_schema;
Dans la requête ci-dessous, changez simplement <--DATABASE_NAME--> en votre base de données et <--TABLENAME--> en votre nom de table où vous voulez juste les valeurs de champ de l'instruction DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
Il y a aussi ceci si vous préférez:
mysql_query('SHOW COLUMNS FROM tableName');
Que dis-tu de ça:
SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',\n')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
SET @cCommand = CONCAT( 'SELECT ', @cCommand, ' from my_database.my_table;');
PREPARE xCommand from @cCommand;
EXECUTE xCommand;
La fonction MySQL décrit la table devrait vous amener où vous voulez aller (mettez votre nom de table pour "table"). Vous devrez analyser la sortie, mais c'est assez facile. Si je me souviens bien, si vous exécutez cette requête, le résultat de la requête PHP accédant aux fonctions qui vous donneraient normalement une paire clé-valeur aura les noms de colonne comme clés. Mais cela fait un moment que je n'ai pas utilisé PHP, alors ne m'y tenez pas. :)
J'avais besoin de noms de colonnes sous forme de tableau plat, tandis que les autres réponses renvoyaient des tableaux associatifs, j'ai donc utilisé:
$con = mysqli_connect('localhost',$db_user,$db_pw,$db_name);
$table = 'people';
/**
* Get the column names for a mysql table
**/
function get_column_names($con, $table) {
$sql = 'DESCRIBE '.$table;
$result = mysqli_query($con, $sql);
$rows = array();
while($row = mysqli_fetch_assoc($result)) {
$rows[] = $row['Field'];
}
return $rows;
}
$col_names = function get_column_names($con, $table);
$ col_names est désormais égal à:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
La mysql_list_fields
fonction pourrait vous intéresser; mais, comme le dit le manuel:
Cette fonction est obsolète. Il est préférable d'utiliser
mysql_query()
pour émettre uneSHOW COLUMNS FROM table [LIKE 'name']
instruction SQL à la place.
vous pouvez obtenir la structure complète de la table en utilisant la commande simple suivante.
DESC TableName
ou vous pouvez utiliser la requête suivante.
SHOW COLUMNS FROM TableName
$col = $db->query("SHOW COLUMNS FROM category");
while ($fildss = $col->fetch_array())
{
$filds[] = '"{'.$fildss['Field'].'}"';
$values[] = '$rows->'.$fildss['Field'].'';
}
if($type == 'value')
{
return $values = implode(',', $values);
}
else {
return $filds = implode(',', $filds);
}
J'ai écrit un simple script php pour récupérer les colonnes de la table via PHP: Show_table_columns.php
<?php
$db = 'Database'; //Database name
$host = 'Database_host'; //Hostname or Server ip
$user = 'USER'; //Database user
$pass = 'Password'; //Database user password
$con = mysql_connect($host, $user, $pass);
if ($con) {
$link = mysql_select_db($db) or die("no database") . mysql_error();
$count = 0;
if ($link) {
$sql = "
SELECT column_name
FROM information_schema.columns
WHERE table_schema = '$db'
AND table_name = 'table_name'"; // Change the table_name your own table name
$result = mysql_query($sql, $con);
if (mysql_query($sql, $con)) {
echo $sql . "<br> <br>";
while ($row = mysql_fetch_row($result)) {
echo "COLUMN " . ++$count . ": {$row[0]}<br>";
$table_name = $row[0];
}
echo "<br>Total No. of COLUMNS: " . $count;
} else {
echo "Error in query.";
}
} else {
echo "Database not found.";
}
} else {
echo "Connection Failed.";
}
?>
Prendre plaisir!
mysqli fetch_field () a fonctionné pour moi:
if ($result = $mysqli -> query($sql)) {
// Get field information for all fields
while ($fieldinfo = $result -> fetch_field()) {
printf("Name: %s\n", $fieldinfo -> name);
printf("Table: %s\n", $fieldinfo -> table);
printf("Max. Len: %d\n", $fieldinfo -> max_length);
}
$result -> free_result();
}
Source: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp