Existe uma maneira de pegar o nome das colunas de uma tabela no mysql? usando php
Existe uma maneira de pegar o nome das colunas de uma tabela no mysql? usando php
Respostas:
Você pode usar o DESCRIBE :
DESCRIBE my_table;
Ou nas versões mais recentes, você pode usar o INFORMAÇÕES_SCHEMA :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Ou você pode usar 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
para descrever pode ser facilmente confundido com DESC
para descer. A quantidade nominal de bytes que você economiza pela falta de legibilidade não vale a pena.
As seguintes instruções SQL são quase equivalentes:
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']
Referência: INFORMATION_SCHEMA COLUMNS
SHOW COLUMNS
retorna uma tabela que contém os nomes das colunas, tipos, etc, enquanto SELECT COLUMN NAME
retorna apenas os nomes das colunas.
Eu criei uma função PDO que retorna todos os nomes de colunas em uma matriz simples.
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);
}
}
A saída será uma matriz:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Desculpe pelo necro, mas eu gosto da minha função;)
PS: Eu não incluí a classe Core, mas você pode usar sua própria classe. DS
Esta solução é da linha de comando mysql
mysql>USE information_schema;
Na consulta abaixo, basta alterar <--DATABASE_NAME--> para o seu banco de dados e <--TABLENAME--> para o nome da tabela, onde você deseja apenas os valores dos campos da instrução DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
Também há isso se você preferir:
mysql_query('SHOW COLUMNS FROM tableName');
Que tal agora:
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;
A tabela de descrição da função MySQL deve levá-lo aonde você quer ir (coloque o nome da tabela em "table"). Você terá que analisar um pouco a saída, mas é bem fácil. Pelo que me lembro, se você executar essa consulta, o resultado da consulta PHP acessando funções que normalmente dariam a você um par de valores-chave terá os nomes das colunas como as chaves. Mas já faz um tempo desde que eu usei o PHP, então não me prenda a isso. :)
Eu precisava de nomes de colunas como uma matriz plana, enquanto as outras respostas retornavam matrizes associativas, então usei:
$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 agora é igual a:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
A mysql_list_fields
função pode lhe interessar; mas, como o manual declara:
Esta função está obsoleta. É preferível usar
mysql_query()
para emitir umaSHOW COLUMNS FROM table [LIKE 'name']
instrução SQL .
você pode obter toda a estrutura da tabela usando o seguinte comando simples.
DESC TableName
ou você pode usar a seguinte consulta.
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);
}
Eu escrevi um script php simples para buscar colunas da tabela através do 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.";
}
?>
Aproveitar!
mysqli fetch_field () funcionou para mim:
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();
}
Fonte: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp