Obtener columnas de una tabla de MySQL con PHP

Introducción

Acabamos de ver cómo obtener un listado de tablas de MySQL a través de PHP usando PDO. Pues bien, ahora veamos algo más preciso o específico y es: cómo obtener un listado de las columnas que tiene una tabla usando PHP y PDO.

Es decir, obtener la estructura o campos de una tabla, no sus datos. Para ello igualmente usaremos una consulta.

Lo que traerá la consulta será el tipo de dato y el nombre del campo o columna, pero podemos modificarla para que traiga más o menos datos.

Columnas que tiene una tabla usando PHP y MySQL

Primero la consulta al motor

Bueno, la consulta es simple y muy parecida a la que vimos hace un momento.

Esta difiere del comando SHOW CREATE TABLE que vimos en el post de respaldar una base de datos porque obtiene las columnas de una forma limpia.

La consulta es:

SELECT COLUMN_NAME AS columna FROM 
information_schema.columns WHERE 
table_schema = 'nombre_de_tu_base_de_datos' 
AND 
table_name = 'nombre_de_la_tabla';

En ese caso usamos un alias para seleccionar el nombre de la columna como “columna”. Por cierto, podemos obtener otros datos, los cuales son:

  • TABLE_CATALOG
  • TABLE_SCHEMA
  • TABLE_NAME
  • COLUMN_NAME
  • ORDINAL_POSITION
  • COLUMN_DEFAULT
  • IS_NULLABLE
  • DATA_TYPE
  • CHARACTER_MAXIMUM_LENGTH
  • CHARACTER_OCTET_LENGTH
  • NUMERIC_PRECISION
  • NUMERIC_SCALE
  • DATETIME_PRECISION
  • CHARACTER_SET_NAME
  • COLLATION_NAME
  • COLUMN_TYPE
  • COLUMN_KEY
  • EXTRA
  • PRIVILEGES
  • COLUMN_COMMENT

Seguramente las que te interesarán (como a mí) serán el tipo de dato, el cual está en COLUMN_TYPE, así como el IS_NULLABLE para saber si puede ser nulo.

Pero bueno, así lo hacemos en el motor. Veamos cómo se hace desde PHP.

Conectar esa consulta con PHP usando PDO

Veamos ahora cómo podemos hacerlo a través de PDO. Vamos a encerrarlo en una función para que sea reutilizable.

<?php
function obtenerColumnasDeUnaTabla($host, $usuario, $pass, $nombreDeLaBaseDeDatos, $nombreDeLaTabla)
{
    try {
        $base_de_datos = new PDO("mysql:host=$host;dbname=$nombreDeLaBaseDeDatos",
            $usuario, $pass);
    } catch (Exception $e) {
        echo "Ocurrió algo con la base de datos: " . $e->getMessage();
    }
    return $base_de_datos
        ->query("SELECT COLUMN_NAME AS columna, COLUMN_TYPE AS tipo
            FROM information_schema.columns WHERE
            table_schema = '$nombreDeLaBaseDeDatos'
            AND table_name = '$nombreDeLaTabla'")
        ->fetchAll(PDO::FETCH_OBJ);
}

Ok… aquí sí hay una diferencia con el ejemplo en donde obteníamos las tablas. Ahora no regresamos un arreglo de strings, sino un arreglo de objetos.

¿Y qué tienen esos objetos? tienen dos propiedades. El nombre de la tabla, y el tipo. El nombre está en ->columna y el tipo en ->tipo.

Por mostrar un ejemplo podemos hacer esto:

<?php
$columnas = obtenerColumnasDeUnaTabla("localhost", "root", "", "mascotas", "mascotas");
print_r($columnas);

Espero no confundir al lector. Recordemos que el último argumento es el nombre de la tabla, y en mi caso tengo una tabla con el mismo nombre que la base de datos.

Si nuestra base de datos fuera “ventas” y la tabla “productos” entonces la llamada quedaría así:

<?php
$columnas = obtenerColumnasDeUnaTabla("localhost", "root", "", "ventas", "productos");

Esto suponiendo que la tabla productos existe dentro de ventas.

Aquí la salida:

Obtener columnas de una tabla de una base de datos con MySQL, PHP y PDO
Obtener columnas de una tabla de una base de datos con MySQL, PHP y PDO

Como se ve ahí, dentro del arreglo hay objetos. Podríamos recorrerlos así:

<?php
foreach($columnas as $columna){
    echo "La columna es: " . $columna->columna . " y su tipo es: " . $columna->tipo . "\n";
}

Obteniendo este resultado:

Recorrer nombre de columnas
Recorrer nombre de columnas

Así de simple es. Con eso terminamos por hoy.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *