Ver índice
Ver y modificar estructuras

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Visualizar la estructura de una tabla

Ver la estructura de una tabla utilizando MySQL

La sentencia MySQL que permiten visualizar la estructura de una tabla es la siguiente:

SHOW FIELDS from nombre de la tabla

Lectura de resultados de sentencias MySQL

La sentencia SHOW FIELDS –como prácticamente ocurre con todas las sentencias MySQL– no devuelve los resultados en un formato legible. Los valores devueltos requieren ser convertidos a un formato que sea interpretable por PHP. Esa traducción se realiza de la siguiente forma:

Por esa razón, la visualización de los resultados de una sentencia MySQL suele requerir dos bucles. Este es el esquema de la lectura:

$resultado=mysql_query(sentencia,$conexion);
while($linea=mysql_fech_row($resultado){
            foreach ($linea as $valor){
                        print $valor;
            }

}

también cabría usar una sintaxis alternativa similar a esta:

$resultado=mysql_query(sentencia,$conexion);
             while($linea=mysql_fech_row($resultado)){
            $matriz[]=$linea;
}

con lo que estaríamos creando un array bidimensional con el contenido de los resultados de cada línea. En este caso el primer índice del array $matriz sería un escalar que empezaría en cero y se iría autoincrementando en una unidad en cada uno de los ciclos del bucle while.

El ejemplo tiene desarrollados ambos procedimientos.

<?php
# asignamos a una variable el nombre de la base de datos
$base="ejemplos";
# esta otra recoge el nombre de la tabla
$tabla="ejemplo1";
# establecemos la conexión con el servidor
$conexion=mysql_connect ("localhost","pepe","pepa");
# seleccionamos la base de datos
mysql_select_db ($base, $conexion);
#ejecutamos mysql_query llamando a la sentencia  SHOW FIELDS
$resultado=mysql_query( "SHOW FIELDS from $tabla",$conexion);
# ejecutamos los bucles que comentamos mas arriba
while($linea=mysql_fetch_row ($resultado)){
     foreach($linea as $valor) {
          print  $valor."<br>";
     }
}
 #tenemos que VOLVER a EJECUTAR LA SENTENCIA MySQL porque el puntero está
# AL FINAL de la ultima línea  de los resultados

print("<BR> Los nuevos resultados son <br>");
$resultado=mysql_query( "SHOW FIELDS from $tabla",$conexion);
             while($linea=mysql_fetch_row ($resultado)){
            $matriz[]=$linea;
}
# leemos ahora el array bidimensional
foreach ($matriz as $indice=>$mi_linea){
    foreach ($mi_linea as $indice2=>$valor){
      print "<i>Indice</i>: ".$indice." <i>Indice2</i>: ".$indice2." <i>Valor</i>: ".$valor."<br>";
   }
}
# cerramos la conexion con el servidor

mysql_close($conexion);
?>
ejemplo373.php

El procedimiento anterior nos facilita información sobre la estructura de la tabla pero quizá no lo haga con toda la claridad que fuera de desear. Para mejorar las prestaciones de la anterior existe una función alternativa que es:

$matriz =mysql_fetch_array($resultado)

idéntica en cuanto a requerimientos pero recogiendo en un array los resultados de la sentencia. Ese array tiene además la peculiaridad de incluye cada uno de los valores en dos índices distintos. Uno de los índices es de tipo escalar. El otro es de tipo asociativo y sus índices son los valores del campo de la tabla del que se han extraido los resultadosativos. En este último caso incorporan como índice el nombre del campo de la tabla del que se han extraído los resultados.

$matriz =mysql_fetch_array($resultado, MYSQL_NUM)

idéntica a la anterior.La inclusión del parámetro MYSQL_NUM (sin comillas )limita sus resultado a los elementos del array de índice escalar.

$matriz =mysql_fetch_array($resultado, MYSQL_ASSOC)

También idéntica a las anteriores. La inclusión del parámetro MYSQL_ASSOC (sin comillas )limita ahora los resultado a los elementos del array asociativo.

<?php
# asignamos a una variable el nombre de la base de datos
$base="ejemplos";
# esta otra recoge el nombre de la tabla
$tabla="ejemplo1";
# establecemos la conexión con el servidor
$conexion=mysql_connect ("localhost","pepe","pepa");
# seleccionamos la base de datos
mysql_select_db ($base, $conexion);
#ejecutamos mysql_query llamando a la sentencia  SHOW FIELDS
$resultado=mysql_query( "SHOW FIELDS from $tabla",$conexion);
print("<br> Los resultados con mysql_fech_array<br><br>");

while ($linea=mysql_fetch_array($resultado)){
# leemos el array de resultados de cada una de las lineas extraidas del resultado
    foreach($linea as $indice=>$valor) {
        print ("El indice es: ".$indice." y el valor es: ".$valor."<br>");
    }
}
/* vamos a separar los elementos escalares de los asociativos
comprobando si es numérico el indice de cada array */
print "<br>Los elementos de array con indice numérico son estos<br>";
$resultado=mysql_query( "SHOW FIELDS from $tabla",$conexion);

while ($linea=mysql_fetch_array($resultado,MYSQL_NUM)){
/* leemos el array de resultados de cada una de las lineas extraidas del resultado e insertamos
un texto que nos ayude a ver lo contenidos de cada linea en la pantalla */
print "<br>Nueva línea<br>";
    foreach($linea as $indice=>$valor) {
          print ("El indice es: ".$indice." y el valor es: ".$valor."<br>");
    }
} 
/* visualizamos los resultados cuando el indice es NO NUMÉRICO */

print "<br>Los elementos de array con indice no numérico son estos<br>";
$resultado=mysql_query( "SHOW FIELDS from $tabla",$conexion);

while ($linea=mysql_fetch_array($resultado, MYSQL_ASSOC)){
/* leemos el array de resultados de cada una de las lineas extraidas del resultado e insertamos
un texto que nos ayude a ver lo contenidos de cada linea en la pantalla */
  print "<br>Nueva línea<br>";
    foreach($linea as $indice=>$valor) {
                  print ("El indice es: ".$indice." y el valor es: ".$valor."<br>");

    }
} 
mysql_close($conexion);
?>
ejemplo374.php

Como habrás podido observar al ejecutar el ejemplo SHOW FIELDS nos permite conocer los propiedades de cada uno de los campos de la tabla: Field (nombre del campo), Type (incluye el tipo, el tamaño y los flags), Null (especificaría si el campo permite o no permite valores nulos), Key (especificaría si ese campo es o es un índice de la tabla) y Default (que incluiría los eventuales valores asignados por defecto al campo).

Otras funciones informativas

Además de la información extraida mediante mysql_fetch_array y mysql_fetch_row el resultado de la ejecución de la sentencia SHOW FIELDS puede proporcionarnos información –incluyendo con parámetro $resultado– a través de las siguientes funciones:

mysql_num_fields ($resultado)

Está función –en la que $resultado es el identificador de resultado– devuelve el número de campos de la tabla.

mysql_num_rows ($resultado)

Devuelve el número de filas del resultado.

mysql_field_table($resultado, 0)

Devuelve el nombre de la tabla. Observa que se pasa con índice 0 ya que esta información parece ser la primera que aparece en la tabla.

mysql_field_type($resultado, $indice)

Nos devuelve el tipo de campo correspondiente a la posición en la tabla señalada por el índice $indice. Dado que la información de primer campo está en el índice 0, el último valor válido de $indice será igual al número de campos menos uno.

mysql_field_flags($resultado, $indice)

Nos devuelve los flags del campo correspondientes a la posición en la tabla señalada por el índice $indice. Se comporta igual que la anterior en lo relativo a los índices.

mysql_field_len($resultado, $indice)

Nos devuelve la longitud del campo correspondiente a la posición en la tabla señalada por el índice $indice. Igual que las anteriores en lo relativo a los índices.

mysql_field_name($resultado, $indice)

Nos devuelve el nombre del campo correspondiente a la posición en la tabla señalada por el índice $indice. En lo relativo a los índices su comportamiento es idéntico a las anteriores.

Liberando memoria

Si queremos liberar la parte de la memoria que contiene un identificador de resultado, bastará con que insertemos la siguiente instrucción:

mysql_free_result($resultado)

Este proceso debe ser posterior a la visualización de los resultados.

ejemplo375.php Ver código fuente

Manipulación de tablas

Borrar tablas

Las sentencias MySQL que permiten borrar una tabla son las siguientes:

DROP TABLE IF EXISTS from nombre_de_la_tabla
o
DROP TABLE from nombre_de_la_tabla

la diferencia entre ambas radica en que usando la primera no se generaría ningún error en el caso de que tratáramos de borrar una tabla inexistente.

    Aquí tienes el código fuente de un ejemplo:

Ver código fuente

Borrar uno de los campos de una tabla

La sentencia MySQL que permite borrar uno de los campos de una tabla es la siguiente:

ALTER TABLE nombre_de_la_tabla DROP nombre_del_campo

Es posible modificar la estructura de una tabla -en este caso borrar un campo- siguiendo un procedimiento similar a los anteriores. La única diferencia estriba en utilizar la sentencia MySQL adecuada. Resulta obvio que el campo debe existir para que pueda ser borrado y si no existiera, es obvio también que se produciría un error.

Aquí tienes el código fuente de un script que borra uno de los campos de una tabla.

Ver código fuente

Añadir un nuevo campo a una tabla

Las sentencia MySQL que permite añadir un nuevo campo a una tabla es la siguiente:

ALTER TABLE nombre_de_la_tabla ADD nombre del campo tipo [flags]

La sintaxis es similar a la de la creación de tablas: el nombre del campo debe ir seguido del tipo sin otra separación que el espacio.

Aquí tienes el código fuente de un script que añade uno de los campos de una tabla.

Ver código fuente