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

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

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

Лучший способ – использовать виртуальную базу данных метаданных INFORMATION_SCHEMA . В частности, таблица INFORMATION_SCHEMA.COLUMNS …

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

Он ОЧЕНЬ мощный и может дать вам информацию о TONS без необходимости синтаксического анализа текста (например, тип столбца, независимо от того, является ли столбец допустимым, максимальный размер столбца, набор символов и т. Д.) …

О, и это стандартный 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.

Кажется, есть два способа:

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

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


Разбор вывода SHOW COLUMNS FROM table;

Подробнее об этом здесь: http://dev.mysql.com/doc/refman/5.0/ru/show-columns.html

Старая функция PHP «mysql_list_fields ()» устарела. Итак, сегодня лучшим способом получить имена полей является запрос «SHOW COLUMNS FROM 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(); 

SHOW COLUMNS в mysql 5.1 (не 5.5) использует временную таблицу диска.

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

SHOW COLUMNS на самом деле не так медленно, возможно, потому что он использует кеш файловой системы. Phpmyadmin говорит ~ 0.5ms последовательно. Это ничто по сравнению с 500 мс-1000 мс на странице wordpress. Но все-таки есть моменты. Существует дисковая система, вы никогда не знаете, что происходит, когда сервер занят, кеш заполнен, hdd застопорился и т. Д.

Получение имен столбцов через SELECT * FROM … LIMIT 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' 

когда вы хотите проверить всю структуру таблицы с помощью некоторых файлов, используйте этот код. В этом запросе я могу найти имя_каталога, column_type и table_name для более подробной информации. Я использую порядок по столбцу_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; 

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

 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; 

введите описание изображения здесь

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

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

В WORDPRESS:

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

если вы используете 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` 

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

 //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-модуль, если необходимо (удаление части дампа данных).

Надеюсь, это поможет кому-то другому.

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

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