Gibt es eine Möglichkeit, den Spaltennamen einer Tabelle in MySQL abzurufen? mit php
Gibt es eine Möglichkeit, den Spaltennamen einer Tabelle in MySQL abzurufen? mit php
Antworten:
Sie können DESCRIBE verwenden :
DESCRIBE my_table;
Oder in neueren Versionen können Sie INFORMATION_SCHEMA verwenden :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Oder Sie können SHOW COLUMNS verwenden :
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
für beschreiben kann leicht mit DESC
für absteigend verwechselt werden . Die nominelle Anzahl von Bytes, die Sie aufgrund mangelnder Lesbarkeit speichern, ist es nicht wert.
Die folgenden SQL-Anweisungen sind nahezu gleichwertig:
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']
Referenz: INFORMATION_SCHEMA COLUMNS
SHOW COLUMNS
eine Tabelle zurück, die die Spaltennamen, -typen usw. enthält, während SELECT COLUMN NAME
nur die Spaltennamen zurückgegeben werden.
Ich habe eine PDO-Funktion erstellt, die alle Spaltennamen in einem einfachen Array zurückgibt.
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);
}
}
Die Ausgabe wird ein Array sein:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Entschuldigung für den Nekro, aber ich mag meine Funktion;)
PS Ich habe die Klasse Core nicht aufgenommen, aber Sie können Ihre eigene Klasse verwenden. DS
Diese Lösung stammt aus der Kommandozeilen-MySQL
mysql>USE information_schema;
In der folgenden Abfrage ändern Sie einfach <--DATABASE_NAME--> in Ihre Datenbank und <--TABLENAME--> in Ihren Tabellennamen, in dem Sie nur Feldwerte der DESCRIBE-Anweisung wünschen
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
Es gibt auch dies, wenn Sie es vorziehen:
mysql_query('SHOW COLUMNS FROM tableName');
Wie wäre es damit:
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;
Die MySQL-Funktion Beschreibungstabelle sollte Sie dahin bringen, wo Sie hin möchten (geben Sie Ihren Tabellennamen für "Tabelle" ein). Sie müssen die Ausgabe etwas analysieren, aber es ist ziemlich einfach. Wenn Sie diese Abfrage ausführen, hat das PHP-Abfrageergebnis, das auf Funktionen zugreift, die Ihnen normalerweise ein Schlüssel-Wert-Paar geben würden, die Spaltennamen als Schlüssel. Aber es ist schon eine Weile her, dass ich PHP verwendet habe, also halte mich nicht daran fest. :) :)
Ich brauchte Spaltennamen als flaches Array, während die anderen Antworten assoziative Arrays zurückgaben, also verwendete ich:
$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 ist jetzt gleich:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
Die mysql_list_fields
Funktion könnte Sie interessieren; aber wie im Handbuch heißt es:
Diese Funktion ist veraltet. Es ist vorzuziehen, stattdessen
mysql_query()
eine SQL-SHOW COLUMNS FROM table [LIKE 'name']
Anweisung auszugeben.
Sie können die gesamte Tabellenstruktur mit dem folgenden einfachen Befehl abrufen.
DESC TableName
oder Sie können folgende Abfrage verwenden.
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);
}
Ich habe ein einfaches PHP-Skript geschrieben, um Tabellenspalten über PHP abzurufen : 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.";
}
?>
Genießen!
mysqli fetch_field () hat für mich gearbeitet:
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();
}
Quelle: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp