Вернуться




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




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

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

 

Ответ 1

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

SELECT `COLUMN_NAME` 

FROM `INFORMATION_SCHEMA`.`COLUMNS` 

WHERE `TABLE_SCHEMA`='yourdatabasename' 

    AND `TABLE_NAME`='yourtablename';

 

Это ОЧЕНЬ мощный способ, и он может предоставить вам ТОННЫ информации без необходимости анализировать текст (например, тип столбца, наличие в нем значения NULL, максимальный размер столбца, набор символов и т. д.).

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

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

 

Ответ 2

Вы можете использовать следующий запрос для 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 ознакомьтесь с документацией.

 

Ответ 3

Используйте 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 и будет удалено в будущем».

 

Ответ 4

Старая функция 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; }

 

 

Ответ 5

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

 

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

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;

 

 

Ответ 6

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

$query     = query("DESC YourTable");  

$col_names = array_column($query, 'Field');

 

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

Для получения результата:

 print_r($col_names);

 

Ответ 7

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

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

SHOW COLUMNS на самом деле не так медленна, возможно, потому что она использует кэш файловой системы. PhpMyAdmin постоянно говорит о ~0.5 мс. Это ничто, по сравнению с 500-1000 мс при обслуживании страницы wordpress. Но все же есть моменты, когда это имеет значение. Здесь задействована дисковая система; никогда не знаешь, что произойдет, когда сервер занят, кэш переполнен, hdd завис и т. д.

Получение имен колонок через SELECT * FROM ... LIMIT 1 заняло около ~0.1 мс, и оно также может использовать кэш запросов.

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

function db_columns_ar($table) {

//возвращает 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];

$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 должны быть заменены вашей конкретной настройкой базы данных.



Если вам понравилась эта статья поделитесь ею с друзьями, тем самым вы помогаете нам развиваться и добавлять всё больше интересного и полезного контента!




Cхожие статьи





Какой хостинг выбрать для сайта

Какой хостинг выбрать для сайта

Для беспроблемного функционирования сайта на просторах интернета необходимо ...

15 Февраля 2021    Web


Как и на чём лучше писать сайты?

Как и на чём лучше писать сайты?

Каждый начинающий сайтостроитель мечтает создать свой уникальный сайт на ко ...

21 Февраля 2021    Web


Ищем качественный и недорогой хостинг? Тогда вам сюда

Ищем качественный и недорогой хостинг? Тогда вам сюда

Рано или поздно всем вебмастерам приходится искать хостинг для своего проек ...

21 Февраля 2021    Web




Напишем