Есть ли способ захватить имя столбца таблицы в mysql? используя php
Вы можете использовать DESCRIBE :
DESCRIBE my_table;
Или в более новых версиях вы можете использовать INFORMATION_SCHEMA :
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Или вы можете использовать SHOW COLUMNS :
SHOW COLUMNS FROM my_table;
Следующие операторы SQL почти эквивалентны:
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']
Ссылка: INFORMATION_SCHEMA COLUMNS
Я создал функцию PDO, которая возвращает все имена столбцов в простом массиве.
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); } }
Результатом будет массив:
Array ( [0] => id [1] => name [2] => email [3] => shoe_size [4] => likes ... )
Извините за necro, но мне нравится моя функция;)
PS Я не включил класс Core, но вы можете использовать свой собственный класс. DS
Это решение из командной строки mysql
mysql>USE information_schema;
В следующем запросе просто измените <- DATABASE_NAME -> в свою базу данных и <- TABLENAME -> на имя таблицы, где вам просто нужны значения поля инструкции DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
Как насчет этого:
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;
Есть и это, если вы предпочитаете:
mysql_query('SHOW COLUMNS FROM tableName');
Вы также можете проверить mysql_fetch_array()
, как в:
$rs = mysql_query($sql); while ($row = mysql_fetch_array($rs)) { //$row[0] = 'First Field'; //$row['first_field'] = 'First Field'; }
Также интересно отметить, что вы можете использовать
EXPLAIN table_name
которое является синонимом DESCRIBLE table_name
и SHOW COLUMS FROM table_name
хотя EXPLAIN чаще используется для получения информации о плане выполнения запроса.
Посмотрите:
mysql_query('DESCRIBE '.$table);
Функция описания функций MySQL должна содержать вас, куда вы хотите пойти (введите имя таблицы в «таблицу»). Вам придется разобрать результат, но это довольно легко. Насколько я помню, если вы выполните этот запрос, результат запроса PHP, получающий доступ к функциям, которые обычно дают вам пару с ключом, будет иметь имена столбцов в качестве ключей. Но прошло какое-то время, так как я использовал PHP, поэтому не держите меня в этом. 🙂
Функция mysql_list_fields
может вас заинтересовать; но, как говорится в руководстве:
Эта функция устарела. Предпочтительнее использовать
mysql_query()
дляmysql_query()
SQLSHOW COLUMNS FROM table [LIKE 'name']
.
это сработало для меня ..
$sql = "desc MyTableName"; $result = @mysql_query($sql); while($row = @mysql_fetch_array($result)){ echo $row[0]."<br>"; }
вы можете получить всю структуру таблицы, используя следующую простую команду.
DESC TableName
или вы можете использовать следующий запрос.
SHOW COLUMNS FROM TableName
в mysql для получения сведений о столбцах и структуры таблицы по следующим ключевым словам или запросам
1. DESC table_name
2. DESCRIBE table_name
3. SHOW COLUMNS FROM table_name
4. SHOW create table table_name;
5. EXPLAIN table_name
$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); }
Мне нужны имена столбцов как плоский массив, в то время как другие ответы возвращают ассоциативные массивы, поэтому я использовал:
$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 теперь равно:
( [0] => name [1] => parent [2] => number [3] => chart_id [4] => type [5] => id )
Я написал простой скрипт php для получения столбцов таблицы через PHP: Show_table_columns.php
Наслаждайтесь!