Yanıtlar:
DESCRIBE uygulamasını kullanabilirsiniz :
DESCRIBE my_table;
Ya yeni sürümlerinde kullanabileceğiniz INFORMATION_SCHEMA :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Veya SHOW COLUMNS kullanabilirsiniz :
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
açıklama DESC
için inmek için kolayca karıştırılabilir . Okunabilirlik eksikliği nedeniyle kaydettiğiniz nominal bayt miktarı buna değmez.
Aşağıdaki SQL ifadeleri neredeyse eşdeğerdir:
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']
Referans: BİLGİ_SCHEMA KOLONLARI
SHOW COLUMNS
sütun adlarını, türlerini vb. İçeren bir tablo SELECT COLUMN NAME
döndürürken, yalnızca sütun adlarını döndürür.
Basit bir dizide tüm sütun adlarını döndüren bir PDO işlevi yaptım.
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);
}
}
Çıktı bir dizi olacaktır:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Necro için özür dilerim ama işlevimi beğendim;)
PS Ben Core sınıf dahil etmedim ama kendi sınıfını kullanabilirsiniz .. DS
Bu çözüm mysql komut satırından
mysql>USE information_schema;
Aşağıdaki sorguda <--DATABASE_NAME--> öğesini veritabanınıza ve <--TABLENAME--> değerini yalnızca DESCRIBE ifadesinin Alan değerlerini istediğiniz tablo adınıza değiştirin
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
İsterseniz bu da var:
mysql_query('SHOW COLUMNS FROM tableName');
Buna ne dersin:
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 işlevi açıklama tablosu sizi istediğiniz yere götürmelidir (tablo adınızı "table" için girin). Çıkışı biraz ayrıştırmanız gerekecek, ancak oldukça kolay. Hatırladığım gibi, bu sorguyu yürütürseniz, normalde size bir anahtar / değer çifti verecek olan işlevlere erişen PHP sorgu sonucu, anahtar olarak sütun adlarına sahip olacaktır. Ama PHP kullandığımdan bu yana bir süre geçti, bu yüzden beni buna tutmayın. :)
Diğer cevaplar ilişkisel diziler döndürürken, düz bir dizi olarak sütun adlarına ihtiyacım vardı, bu yüzden kullandım:
$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 artık şuna eşit:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
mysql_list_fields
Fonksiyon ilginizi çekebilecek; ancak kılavuzda belirtildiği gibi:
Bu işlev kullanımdan kaldırılmıştır. Bunun yerine
mysql_query()
bir SQLSHOW COLUMNS FROM table [LIKE 'name']
deyimi vermek tercih edilir.
aşağıdaki basit komutu kullanarak tüm tablo yapısını alabilirsiniz.
DESC TableName
veya aşağıdaki sorguyu kullanabilirsiniz.
SHOW COLUMNS FROM TableName
$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 ile tablo sütunları getirmek için basit bir php komut dosyası var: Show_table_columns.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.";
}
?>
Zevk almak!
mysqli fetch_field () benim için çalıştı:
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();
}
Kaynak: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp