Запрос MySQL для получения имен столбцов?

Я хотел бы получить все имена col таблицы mysql в массив в php?

есть ли запрос для этого?

18 ответов


лучший способ-использовать information_schema для метаданные виртуальной базы данных. В частности,базы данных information_schema.Колонки таблица...

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename';

Это очень мощный и может дать вам тонны информации без необходимости разбора текста (например, колонного типа, допускает ли столбец значения null, максимальный размер столбца, набор символов и т. д.)...

О, и это стандартный SQL (тогда как SHOW ... является конкретным расширением MySQL)...

дополнительные информация о разнице между SHOW... и с помощью INFORMATION_SCHEMA таблицы, проверьте MySQL документация INFORMATION_SCHEMA В общем...


вы можете использовать следующий запрос для MYSQL:

SHOW columns FROM your-table;

Ниже приведен пример кода, который показывает, как реализовать выше синтаксис в php, чтобы перечислить имена столбцов:

$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
    echo $row['Field']."<br>";
}

для получения подробной информации о выходе SHOW COLUMNS FROM TABLE на странице: MySQL Refrence.


кажется, есть 2 пути:

DESCRIBE `tablename`

или

SHOW COLUMNS FROM `tablename`

подробнее о DESCRIBE здесь:http://dev.mysql.com/doc/refman/5.0/en/describe.html


Я делал это в прошлом.

SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here'; 

редактировать: сегодня я узнал, лучший способ сделать это. См. ответ ircmaxell.


парсить вывод SHOW COLUMNS FROM table;

вот еще об этом здесь:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html


старая функция PHP "mysql_list_fields ()" устарела. Итак, сегодня лучший способ получить имена полей-это запрос "показать столбцы из table_name [LIKE 'name']". Итак, вот небольшой пример:

$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; }

использовать mysql_fetch_field() для просмотра всех данных столбца. См.руководство.

$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;
}

"предупреждение Это расширение является устаревшей начиная с версии PHP 5.5.0, и будет удалено в будущем."


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();

Если вы хотите проверить всю структуру таблицы с некоторыми поданными, то используйте этот код. В этом запросе я выбираю column_name, column_type и table_name для получения дополнительной информации . Я использую order BY column_type, чтобы легко его видеть.

SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;

Если вы хотите проверить только двойной тип файла, то вы можете сделать это легко

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;

enter image description here

Если вы хотите проверить, какое поле разрешает тип null и т. д., Вы можете использовать это

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;

enter image description here

вы хотите проверить больше, чем ссылка thik также поможет вам.

https://dev.mysql.com/doc/refman/5.7/en/columns-table.html


ПОКАЗАТЬ СТОЛБЦЫ в MySQL 5.1 (не 5.5) использует временную таблицу диска.

поэтому в некоторых случаях его можно считать медленным. По крайней мере, он может поднять свой created_tmp_disk_tables значение. Представьте себе одну временную таблицу дисков на соединение или на каждый запрос страницы.

ПОКАЗАТЬ СТОЛБЦЫ - это не так уж медленно, возможно, потому, что он использует кэш файловой системы. Phpmyadmin говорит ~0,5 мс последовательно. Это ничто по сравнению с 500ms-1000ms обслуживания страницы wordpress. Но все же иногда это имеет значение. Вовлечение дисковой системы, вы никогда не знаете, что происходит, когда сервер занят, кэш заполнен, hdd заглох и т. д.

получение имен столбцов через ВЫБЕРИТЕ * FROM ... Предел 1 был около ~0,1 мс, и он также может использовать кэш запросов.

Итак, вот мой маленький оптимизированный код для получения имен столбцов из таблицы без использования показать колонки если можно:

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;
}

Примечания:

  • пока первая строка таблицы не содержит диапазон мегабайт данных, она должна работать нормально.
  • имена функций db_rows и db_row_ar должен быть заменен на вашу конкретную базу данных установка.

не уверен, что это то, что вы искали, но это сработало для меня:

$query = query("DESC YourTable");  
$col_names = array_column($query, 'Field');

это возвращает простой массив имен столбцов / имен переменных в вашей таблице или массиве в виде строк, что мне нужно для динамического построения запросов MySQL. Мое разочарование было в том, что я просто не знаю, как индексировать массивы в PHP очень хорошо, поэтому я не был уверен, что делать с результатами DESC или SHOW. Надеюсь, мой ответ поможет новичкам, таким как я!

для проверки результата: print_r($col_names);


попробуйте это, я лично использую его:

SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name' 

В WORDPRESS:

global $wpdb;   $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
  var_dump( $column_name );
}

этот вопрос старый, но я здесь ищу способ найти данный запрос его имена полей динамическим способом (не обязательно только поля таблицы). И поскольку люди продолжают указывать это как ответ на эту задачу в других связанных вопросах, я делюсь тем, как я нашел, что это можно сделать, используя советы Гэвина Симпсона:

//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>";
    }
}

Это можно легко модулировать для вставки имен полей в массив.

используя простой: $sql="SELECT * FROM myTable LIMIT 1" может дать вам поля любой стол, без необходимости использовать SHOW COLUMNS или любой дополнительный модуль php, если необходимо (удаление части дампа данных).

надеюсь, это поможет кому-то еще.


Если вы используете php, используйте это суть.

он может получить выбрать поля полную информацию без результата,и все пользовательские поля, такие как:

SELECT a.name aname, b.name bname, b.* 
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;

если выше sql не возвращает никаких данных, также получите имена полей aname, bname, другое имя поля b

всего две строки:

$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();

этот запрос выбирает список всех столбцов в базе данных без указания имени таблицы. Он возвращает список только имен столбцов:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_schema = 'db_name'

однако, когда я запустил этот запрос в phpmyadmin, он показал серию ошибок. Тем не менее, это сработало. Поэтому используйте его с осторожностью.


самое простое решение из всех ответов:

DESC `table name`

или

DESCRIBE `table name`

или

SHOW COLUMNS FROM `table name`

Я не эксперт, но это работает для меня..

$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>";}    

}