C'è un modo per afferrare il nome delle colonne di una tabella in mysql? usando php
C'è un modo per afferrare il nome delle colonne di una tabella in mysql? usando php
Risposte:
Puoi usare DESCRIBE :
DESCRIBE my_table;
O nelle versioni più recenti puoi utilizzare INFORMATION_SCHEMA :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Oppure puoi usare MOSTRA COLONNE :
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
per descrivere può essere facilmente confuso con DESC
per discendente. La quantità nominale di byte salvati per mancanza di leggibilità non vale la pena.
Le seguenti istruzioni SQL sono quasi equivalenti:
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']
Riferimento: INFORMATION_SCHEMA COLUMNS
SHOW COLUMNS
restituisce una tabella contenente i nomi delle colonne, i tipi, ecc., Mentre SELECT COLUMN NAME
restituisce solo i nomi delle colonne.
Ho creato una funzione DOP che restituisce tutti i nomi di colonna in un semplice array.
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);
}
}
L'output sarà un array:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Scusate il necro ma mi piace la mia funzione;)
PS Non ho incluso la classe Core ma puoi usare la tua classe .. DS
Questa soluzione proviene dalla riga di comando mysql
mysql>USE information_schema;
Nella query seguente basta cambiare <--DATABASE_NAME--> nel database e <--TABLENAME--> nel nome della tabella in cui si desidera solo i valori dei campi dell'istruzione DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
C'è anche questo se preferisci:
mysql_query('SHOW COLUMNS FROM tableName');
Cosa ne pensi di questo:
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;
La funzione MySQL descrivi la tabella dovrebbe portarti dove vuoi andare (inserisci il nome della tua tabella per "tabella"). Dovrai analizzare un po 'l'output, ma è abbastanza facile. Come ricordo, se esegui quella query, il risultato della query PHP accedendo a funzioni che normalmente ti darebbero una coppia chiave-valore avrà i nomi delle colonne come chiavi. Ma è da un po 'che non uso PHP, quindi non trattenermi. :)
Avevo bisogno di nomi di colonne come array flat, mentre le altre risposte restituivano array associativi, quindi ho usato:
$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 ora è uguale a:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
La mysql_list_fields
funzione potrebbe interessarti; ma, come afferma il manuale:
Questa funzione è obsoleta. È preferibile utilizzare invece
mysql_query()
l'emissione diSHOW COLUMNS FROM table [LIKE 'name']
un'istruzione SQL .
puoi ottenere l'intera struttura della tabella usando il semplice comando seguente.
DESC TableName
oppure puoi usare la seguente query.
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);
}
Ho scritto un semplice script php per recuperare le colonne della tabella tramite PHP: 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.";
}
?>
Godere!
mysqli fetch_field () ha funzionato per me:
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();
}
Fonte: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp