Ver índice
Ver y modificar estructuras (usando MySQLi)

        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 (estilo por procesos)

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=mysqli_query($conexion,$sentencia);
while($linea=mysqli_fech_row($resultado){
            foreach ($linea as $valor){
                        print $valor;
            }

}

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

$resultado=mysqli_query(sentencia,$conexion);
             while($linea=mysqli_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
# incluimos una variable con el nombre de la tabla
$tabla="ejemplo1";
# incluimos los datos de la conexión y la base de datos para
include("mysqli.inc.php");
# establecemos la conexión con el servidor y seleccionamos la base de datos
$conexion=mysqli_connect ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);

$sentencia="SHOW FIELDS from ".$tabla;
#ejecutamos mysql_query llamando a la sentencia  SHOW FIELDS
$resultado=mysql_query($conexion,$sentencia);
# ejecutamos los bucles que comentamos mas arriba
while($linea=mysqli_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($conexion,$sentencia);
             while($linea=mysqli_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

mysqli_close($conexion);
?>
ejemplo566.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 =mysqli_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 =mysqli_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 =mysqli_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
# incluimos una variable con el nombre de la tabla
$tabla="ejemplo1";
# incluimos los datos de la conexión y la base de datos para
include("mysqli.inc.php");
# establecemos la conexión con el servidor y seleccionamos la base de datos
$conexion=mysqli_connect ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);

$sentencia="SHOW FIELDS from ".$tabla;
#ejecutamos mysql_query llamando a la sentencia  SHOW FIELDS
$resultado=mysqli_query($conexion,$sentencia);
print("<br> Los resultados con mysqli_fech_array<br><br>");

while ($linea=mysqli_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=mysqli_query($conexion,$sentencia);

while ($linea=mysqli_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=mysqli_query($conexion,$sentencia);

while ($linea=mysqli_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>");

    }
} 
mysqli_close($conexion);
?>
ejemplo567.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).

Visualizar la estructura de una tabla (estilo orientado a objetos)

Ver la estructura de una tabla utilizando MySQL

La sentencia MySQL que permiten visualizar la estructura de una tabla sigue siendo:

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=$objeto_mysqli->query($sentencia);
while($linea=$resultado->fech_row(){
            foreach ($linea as $valor){
                        print $valor;
            }

}

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

$resultado=$objeto_mysqli->query(sentencia);
             while($linea=$resultado->fech_row()){
            $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
# incluimos una variable con el nombre de la tabla
$tabla="ejemplo1";
# incluimos los datos de la conexión y la base de datos para
include("mysqli.inc.php");
# creamos el objeto conexión con el servidor y seleccionamos la base de datos
$objeto_mysqli=new mysqli ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);

$sentencia="SHOW FIELDS from ".$tabla;
#ejecutamos mysql_query llamando a la sentencia  SHOW FIELDS
$resultado=$objeto_mysqli->query($sentencia);
# ejecutamos los bucles que comentamos mas arriba
while($linea=$resultado->fetch_row ()){
     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=$objeto_mysqli->query($sentencia);
             while($linea=$resultado->fetch_row ()){
            $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

$objeto_mysqli->close();
?>
ejemplo568.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 método alternativa que es:

$matriz =$resultado->fetch_array()

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 =$resultado->fetch_array(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 =$matriz =$resultado->fetch_array(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
# incluimos una variable con el nombre de la tabla
$tabla="ejemplo1";
# incluimos los datos de la conexión y la base de datos para
include("mysqli.inc.php");
# creamos el nuevo objeto conexión con el servidor y seleccionamos la base de datos
$objeto_mysqli=new mysqli ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);

$sentencia="SHOW FIELDS from ".$tabla;
#ejecutamos mysql_query llamando a la sentencia  SHOW FIELDS
$resultado=$objeto_mysqli->query($sentencia);
print("<br> Los resultados con fech_array<br><br>");

while ($linea=$resultado->fetch_array()){
# 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=$objeto_mysqli->query($sentencia);

while ($linea=$resultado->fetch_array(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=$objeto_mysqli->query($sentencia);

while ($linea=$resultado->fetch_array( 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>");

    }
} 
$objeto_mysqli->close();
?>
ejemplo569.php

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 dos ejemplos que utilizan las distintas opciones de programación.

Ver código fuente
mediante procesos
Ver código fuente
mediante objetos

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 dos script que borran uno de los campos de una tabla.

Ver código fuente
mediante procesos
Ver código fuente
mediante objetos

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 dos script que añadem uno de los campos de una tabla.

Ver código fuente
mediante procesos
Ver código fuente
mediante objetos