Відповіді:
Ви можете використовувати 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;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
desc my_table;
:-)
DESC
для опису можна легко сплутати з DESC
низхідним. Номінальна кількість байтів, яку ви економите за відсутності читабельності, не варто.
Наступні твердження 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']
Довідка: ІНФОРМАЦІЯ_ШЧЕМА КОЛІН
SHOW COLUMNS
повертає таблицю, що містить назви стовпців, типи тощо, а SELECT COLUMN NAME
повертає лише назви стовпців.
Я зробив функцію 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
... )
Вибачте за некро, але мені подобається моя функція;)
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-->';
Є також це, якщо ви віддаєте перевагу:
mysql_query('SHOW COLUMNS FROM 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 повинна привести вас туди, куди ви хочете піти (введіть назву таблиці для "таблиця"). Вам доведеться проаналізувати вихід, але це досить просто. Як я пам'ятаю, якщо ви виконаєте цей запит, результат отримання запиту PHP, що отримує доступ до функцій, які зазвичай дають вам пару ключових значень, матимуть назви стовпців як ключі. Але минув час, коли я використовував PHP, тому не тримайте мене за це. :)
Мені потрібні імена стовпців як плоский масив, а інші відповіді повертають асоціативні масиви, тому я використовував:
$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
)
mysql_list_fields
Функція може зацікавити вас; але, як зазначено в посібнику:
Ця функція застаріла. Переважно використовувати замість цього
mysql_query()
випуск оператора SQLSHOW COLUMNS FROM table [LIKE 'name']
.
ви можете отримати всю структуру таблиці за допомогою наступної простої команди.
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);
}
Я написав простий скрипт PHP для отримання стовпців таблиці через PHP: Show_table_column.php
<?php
$db = 'Database'; //Database name
$host = 'Database_host'; //Hostname or Server ip
$user = 'USER'; //Database user
$pass = 'Password'; //Database user password
$con = mysql_connect($host, $user, $pass);
if ($con) {
$link = mysql_select_db($db) or die("no database") . mysql_error();
$count = 0;
if ($link) {
$sql = "
SELECT column_name
FROM information_schema.columns
WHERE table_schema = '$db'
AND table_name = 'table_name'"; // Change the table_name your own table name
$result = mysql_query($sql, $con);
if (mysql_query($sql, $con)) {
echo $sql . "<br> <br>";
while ($row = mysql_fetch_row($result)) {
echo "COLUMN " . ++$count . ": {$row[0]}<br>";
$table_name = $row[0];
}
echo "<br>Total No. of COLUMNS: " . $count;
} else {
echo "Error in query.";
}
} else {
echo "Database not found.";
}
} else {
echo "Connection Failed.";
}
?>
Насолоджуйтесь!
mysqli fetch_field () працював для мене:
if ($result = $mysqli -> query($sql)) {
// Get field information for all fields
while ($fieldinfo = $result -> fetch_field()) {
printf("Name: %s\n", $fieldinfo -> name);
printf("Table: %s\n", $fieldinfo -> table);
printf("Max. Len: %d\n", $fieldinfo -> max_length);
}
$result -> free_result();
}
Джерело: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp