Respostas:
A melhor maneira é usar o banco de dados virtual de metadados INFORMATION_SCHEMA . Especificamente a tabela INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
É MUITO poderoso e pode fornecer toneladas de informações sem a necessidade de analisar o texto (como tipo de coluna, se a coluna é anulável, tamanho máximo da coluna, conjunto de caracteres, etc.) ...
Ah, e é SQL padrão (Considerando que SHOW ...
é uma extensão específica do MySQL) ...
Para obter mais informações sobre a diferença entre SHOW...
e usar as INFORMATION_SCHEMA
tabelas, consulte a documentaçãoINFORMATION_SCHEMA
do MySQL em geral ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
antes também, mas eu realmente não gosto disso. E não tenho nenhum problema com os back-ticks para delimitação de identificador. Na verdade, eu gosto deles melhor do que aspas duplas (aspas faz com que o errado consulta sensação para mim) ... A cada um o seu próprio ...
Você pode usar a seguinte consulta para MYSQL:
SHOW columns FROM your-table;
Abaixo está o código de exemplo que mostra Como implementar a sintaxe acima no php para listar os nomes das colunas:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Para detalhes sobre a saída da SHOW COLUMNS FROM TABLE
visita: MySQL Refrence.
DESC TableName;
;-)
Parece que existem 2 maneiras:
DESCRIBE `tablename`
ou
SHOW COLUMNS FROM `tablename`
Mais DESCRIBE
aqui: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
é apenas um atalho para SHOW COLUMNS FROM
.
DESC
é ainda mais curta para DESCRIBE
!
Edit : Hoje eu aprendi a melhor maneira de fazer isso. Por favor, veja a resposta da ircmaxell.
Analise a saída de SHOW COLUMNS FROM table;
Aqui está mais sobre isso aqui: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Use mysql_fetch_field()
para visualizar todos os dados da coluna. Veja o manual .
$query = 'select * from myfield';
$result = mysql_query($query);
$i = 0;
while ($i < mysql_num_fields($result))
{
$fld = mysql_fetch_field($result, $i);
$myarray[]=$fld->name;
$i = $i + 1;
}
"Aviso Esta extensão está obsoleta no PHP 5.5.0 e será removida no futuro."
mysqli_num_fields()
e mysqli_fetch_field_direct()
são os métodos atualizados
Uma função antiga do PHP "mysql_list_fields ()" está obsoleta. Portanto, hoje a melhor maneira de obter nomes de campos é uma consulta "SHOW COLUMNS FROM table_name [LIKE 'name']". Então, aqui está um pequeno exemplo:
$fields = array();
$res=mysql_query("SHOW COLUMNS FROM mytable");
while ($x = mysql_fetch_assoc($res)){
$fields[] = $x['Field'];
}
foreach ($fields as $f) { echo "<br>Field name: ".$f; }
function get_col_names(){
$sql = "SHOW COLUMNS FROM tableName";
$result = mysql_query($sql);
while($record = mysql_fetch_array($result)){
$fields[] = $record['0'];
}
foreach ($fields as $value){
echo 'column name is : '.$value.'-';
}
}
return get_col_names();
Não tenho certeza se é isso que você estava procurando, mas funcionou para mim:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Isso retorna uma matriz simples dos nomes de colunas / nomes de variáveis em sua tabela ou matriz como strings, que é o que eu precisava para criar dinamicamente consultas MySQL. Minha frustração foi que eu simplesmente não sabia como indexar matrizes muito bem em PHP, então não tinha certeza do que fazer com os resultados de DESC ou SHOW. Espero que minha resposta seja útil para iniciantes como eu!
Para verificar o resultado: print_r($col_names);
quando você quiser verificar toda a estrutura de sua tabela com alguns arquivos, use esse código. Nesta consulta, selecione column_name, column_type e table_name para obter mais detalhes. Eu uso order by column_type para que eu possa vê-lo facilmente.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Se você quiser verificar apenas o tipo duplo arquivado, poderá fazê-lo facilmente
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' AND DATA_TYPE like '%bigint%' order by DATA_TYPE;
se você quiser verificar qual campo permite o tipo nulo, etc., poderá usar este
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' and DATA_TYPE like '%bigint%' and IS_NULLABLE ='NO' order by COLUMN_TYPE;
você deseja verificar mais do que o link thik também ajudá-lo.
SHOW COLUMNS no mysql 5.1 (não 5.5) usa uma tabela de disco temporária.
Portanto, pode ser considerado lento em alguns casos. Pelo menos, ele pode aumentar seu valor created_tmp_disk_tables . Imagine uma tabela de disco temporária por conexão ou por cada solicitação de página.
SHOW COLUMNS não é tão lento, possivelmente porque usa o cache do sistema de arquivos. Phpmyadmin diz ~ 0.5ms de forma consistente. Isso não é nada comparado a 500ms-1000ms de servir uma página wordpress. Mas, ainda assim, há momentos em que isso importa. Há um envolvimento do sistema de disco, você nunca sabe o que acontece quando o servidor está ocupado, o cache está cheio, o disco rígido está parado etc.
A recuperação de nomes de colunas por meio de SELECT * FROM ... LIMIT 1 estava em torno de ~ 0,1ms e também pode usar o cache de consultas.
Então, aqui está meu pequeno código otimizado para obter nomes de colunas de uma tabela, sem usar as colunas show, se possível:
function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();
global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
return $db_columns_ar_cache[$table];
//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
{
foreach($row as $name=>$val)
$cols[$name]=$name;
}
else
{
$coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
if($coldata)
foreach($coldata as $row)
$cols[$row->Field]=$row->Field;
}
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}
Notas:
Experimente este, eu pessoalmente o uso:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Essa pergunta é antiga, mas cheguei aqui procurando uma maneira de encontrar uma determinada consulta com seus nomes de campo de forma dinâmica (não necessariamente apenas os campos de uma tabela). E como as pessoas apontam isso como a resposta para essa tarefa em outras questões relacionadas, estou compartilhando o modo como descobri que isso pode ser feito, usando as dicas de Gavin Simpson:
//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
$rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
if(mysqli_num_rows($rsResult)>0)
{
//We start with header. >>>Here we retrieve the field names<<<
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
$i = 0;
while ($i < mysqli_num_fields($rsResult)){
$field = mysqli_fetch_field_direct($rsResult, $i);
$fieldName=$field->name;
echo "<td><strong>$fieldName</strong></td>";
$i = $i + 1;
}
echo "</tr>";
//>>>Field names retrieved<<<
//We dump info
$bolWhite=true;
while ($row = mysqli_fetch_assoc($rsResult)) {
echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
$bolWhite=!$bolWhite;
foreach($row as $data) {
echo "<td>$data</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
Isso pode ser facilmente modificado para inserir os nomes dos campos em uma matriz.
Usando um simples: $sql="SELECT * FROM myTable LIMIT 1"
pode fornecer os campos de qualquer tabela, sem a necessidade de usar SHOW COLUMNS
ou de qualquer módulo php extra, se necessário (removendo a parte do dump de dados).
Espero que isso ajude outra pessoa.
Se você usa php, use esta essência .
ele pode obter informações completas dos campos selecionados sem resultado , e todos os campos personalizados, como:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
se acima do sql não retornar dados, também receberá os nomes dos campos aname, bname, outro nome do campo b
apenas duas linhas:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Esta consulta busca uma lista de todas as colunas em um banco de dados sem precisar especificar um nome de tabela. Retorna uma lista de apenas nomes de colunas:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
No entanto, quando executei esta consulta no phpmyadmin, ela exibiu uma série de erros. No entanto, funcionou. Portanto, use-o com cautela.
A solução mais simples de todas as respostas:
DESC `table name`
ou
DESCRIBE `table name`
ou
SHOW COLUMNS FROM `table name`
se você precisar apenas dos nomes e tipos de campos (talvez para facilitar a cópia e colar no Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
remover
DATA_TYPE='decimal'
se você quiser todos os tipos de dados
Eu não sou especialista, mas isso funciona para mim ..
$sql = "desc MyTable";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>"; // returns the first column of array. in this case Field
// the below code will return a full array-> Field,Type,Null,Key,Default,Extra
// for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";}
}
Eu tentei esta consulta no SQL Server e funcionou para mim:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')