¿Hay alguna manera de obtener el nombre de las columnas de una tabla en mysql? usando php
¿Hay alguna manera de obtener el nombre de las columnas de una tabla en mysql? usando php
Respuestas:
Puedes usar DESCRIBE :
DESCRIBE my_table;
O en versiones más recientes puede usar INFORMATION_SCHEMA :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
O puede usar 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
para describir puede confundirse fácilmente con DESC
para descender. La cantidad nominal de bytes que guarda por falta de legibilidad no vale la pena.
Las siguientes instrucciones SQL son casi equivalentes:
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']
Referencia: INFORMACIÓN_ COLUMNAS DE ESQUEMA
SHOW COLUMNS
devuelve una tabla que contiene los nombres de columna, tipos, etc., mientras que SELECT COLUMN NAME
solo devuelve los nombres de columna.
Hice una función PDO que devuelve todos los nombres de columna en una matriz simple.
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);
}
}
La salida será una matriz:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Perdón por el necro pero me gusta mi función;)
PD: No he incluido la clase Core pero puedes usar tu propia clase. DS
Esta solución es de la línea de comando mysql
mysql>USE information_schema;
En la consulta a continuación, simplemente cambie <--DATABASE_NAME--> a su base de datos y <--TABLENAME--> a su nombre de tabla donde solo desea Valores de campo de la declaración DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
También hay esto si lo prefieres:
mysql_query('SHOW COLUMNS FROM tableName');
Qué tal esto:
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 tabla de descripción de la función MySQL debería llevarlo a donde desea ir (ponga el nombre de su tabla para "tabla"). Tendrá que analizar un poco la salida, pero es bastante fácil. Como recuerdo, si ejecuta esa consulta, el resultado de la consulta PHP al acceder a funciones que normalmente le darían un par clave-valor tendrá los nombres de columna como las claves. Pero ha pasado un tiempo desde que usé PHP, así que no me obligue a eso. :)
Necesitaba nombres de columna como una matriz plana, mientras que las otras respuestas devolvieron matrices asociativas, así que usé:
$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 ahora es igual a:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
La mysql_list_fields
función puede interesarle; pero, como dice el manual:
Esta función está en desuso. Es preferible utilizar
mysql_query()
para emitir unaSHOW COLUMNS FROM table [LIKE 'name']
declaración SQL en su lugar.
puede obtener toda la estructura de la tabla usando el siguiente comando simple.
DESC TableName
o puede usar la siguiente consulta.
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);
}
Escribí un script php simple para buscar columnas de tabla a través de 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.";
}
?>
¡Disfrutar!
mysqli fetch_field () funcionó para mí:
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();
}
Fuente: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp