Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Aprender a desarrollar un sitio web con PHP y MySQL
  3. Base de datos MySQL
Extrait - Aprender a desarrollar un sitio web con PHP y MySQL Ejercicios prácticos y corregidos (3ª edición)
Extractos del libro
Aprender a desarrollar un sitio web con PHP y MySQL Ejercicios prácticos y corregidos (3ª edición) Volver a la página de compra del libro

Base de datos MySQL

Presentación

1. Introducción

Una base de datos es un conjunto estructurado de datos que administra un equipo. Si desea guardar la información en su sitio web, como el nombre o los apellidos o lo necesario para crear un blog, está obligado a utilizar una base de datos. En teoría, puede utilizar un archivo de texto, pero en la práctica esto no es recomendable, porque puede provocar muchos problemas, por ejemplo, si varias personas están tratando de escribir al mismo tiempo.

Hay varios programas de bases de datos, como Oracle o SQL Server, pero no son gratuitos y solo resultan realmente útiles en la gestión de un gran volumen de datos. En este capítulo vamos a ver la base de datos MySQL, que es gratuita y está incluida en Wamp. Puede instalar MySQL en un servidor distinto al servidor web, pero en la práctica se instala en el mismo lugar.

Una base de datos permite almacenar datos y también clasificarlos, de esta manera se pueden encontrar rápidamente con el lenguaje SQL (Structured Query Language). El lenguaje SQL se utiliza para ejecutar acciones en la base de datos, como crear tablas, añadir o eliminar datos...

Una consulta es un registro de escritura del lenguaje SQL.

Por ejemplo, para leer los apellidos y el nombre de la tabla cliente:

SELECT apellido, nombre FROM cliente; 

El lenguaje SQL tiene la ventaja de ser común a todas las bases de datos. Por supuesto, hay algunas...

phpMyAdmin

phpMyAdmin se incluye en WAMP para gestionar su interfaz web de base de datos. Esta interfaz cuenta con diferentes menús para crear bases de datos, tablas, campos, añadir o eliminar datos...

Así, puede administrar su base de datos sin tener que escribir el comando SQL.

Para acceder a phpMyAdmin, haga clic con el botón izquierdo del ratón sobre el icono images/02RI01N4.png en la barra de tareas y en phpMyAdmin 4.7.9.
Si observa que su equipo se ralentiza significativamente, puede que necesite cambiar el puerto. Para ello, haga clic en el botón izquierdo del ratón en el icono images/02RI01N4.png en la barra de tareas, elija Apache y, a continuación, httpd.conf. Busque la línea Listen 127.0.0.1:80 y cámbiela por Listen 127.0.0.1:8081. A continuación, busque la línea ServerName 127.0.0.1:80 y cámbiela por ServerName 127.0.0.1:8081. Esto hará que escuche su servidor web en otro puerto. Asegúrese de cambiar este puerto también en su URL, a partir de ahora tendrá que escribir http://127.0.0.1:8081/ para llamar a sus páginas PHP así como para phpMyAdmin.

Accederá a una interfaz web con la siguiente URL: http://127.0.0.1/módulos/phpmyadmin403x130626101038/#PMAURL-0:index.php? deb=&tabla= &server=1&target=&token=5b0148d8936b4b993c28008d6d4bd01b

images/07-01.png

Ahora va a aprender a crear una base de datos y a utilizar todas las herramientas de phpMyAdmin.

 Haga clic en la ficha Bases de datos.

 Introduzca el nombre de la base de datos que desee crear en la zona introducida y mantenga por defecto el idioma utilizado (cotejamiento). Haga clic en Crear.

A la izquierda aparecerá su base de datos. En el siguiente ejemplo, la base de datos se llama _prueba.

images/07-02.png

Nunca introduzca caracteres especiales en los nombres de la base, de la tabla, de los campos o cualquier otro objeto en la base de datos. Así podrá evitar complicaciones.

 Haga clic en _prueba.

Ahora tenemos que crear una tabla que muestre el número de campos que contiene. Es un valor indicativo, porque todo puede cambiar después.

 Escriba "Persona" en el cuadro de texto a la derecha del nombre y el número 4 en el cuadro de texto del número de campos. De hecho, la tabla Persona contendrá cuatro campos:

Id_persona (Int), Apellidos (Varchar 20), Nombre (Varchar 20) y Edad (Int).

images/07-03.png

 Haga clic en Continuar.

images/07-04.png

Aparecen...

El lenguaje SQL

1. Presentación

En este libro, no se muestra la forma de instalar el servidor MySQL. Va a utilizar phpMyAdmin y especialmente la pestaña SQL para ejecutar las diferentes consultas.

Se recomienda no poner caracteres especiales en los nombres de bases de datos, tablas o campos. Debe tratar de usar solo caracteres no acentuados, cifras y el símbolo _. Si añade espacios en sus nombres, tiene que delimitarlos con comillas o apóstrofes.

Hemos visto en la presentación de phpMyAdmin que una base de datos contiene tablas que a su vez contienen campos. Por lo tanto, la sintaxis para hacer referencia a un campo en la consulta es:

nombre_base_de_datos.nombre_tabla.nombre_campo 

Cuando ejecuta una consulta SQL con la pestaña SQL de phpMyAdmin, debe saber en qué lugar se ubica en relación con la base de datos. Si ya ha seleccionado la base de datos, se mostrará el nombre del servidor y el nombre de su base de datos en la parte superior de la página phpMyAdmin:

images/07-12.png

En este caso, no es necesario recordar el nombre de su base de datos en la consulta, puesto que ya está dentro de ella.

Por ejemplo, escriba:

SELECT * FROM Persona 

Y no:

SELECT * FROM _prueba.Persona 

En el resto de este capítulo, se utiliza la base de datos _prueba, que contiene la tabla Persona con los campos Id_persona, Nombre, Apellidos y Edad.

2. Leer datos

La instrucción que permite leer en una tabla es SELECT.

Por ejemplo:

SELECT * FROM Persona 
  • SELECT: selecciona o lee

  • *: todos los campos

  • FROM: de o en

  • Persona: nombre de la tabla

Por lo tanto, esta consulta significa: leer todos los campos de la tabla Persona.

Seleccione la tabla Persona y copie esta consulta en la pestaña SQL de phpMyAdmin y haga clic en Continuar:

images/07-13.png

Para mostrar solo algunos campos, únicamente tiene que nombrarlos separados por comas.

Por ejemplo:

Select Nombre, Apellidos FROM Persona 

Da como resultado:

images/07-14.png

3. Escribir datos

La instrucción que permite escribir en una tabla es INSERT INTO.

Por ejemplo:

INSERT INTO Persona (Nombre, Apellidos, Edad) VALUES 
('Luis','Del Morán',38) 
  • INSERT INTO: indica una consulta de inserción.

  • Persona: nombre de la tabla.

  • (Nombre, Apellidos, Edad): nombre de los campos en los que quiere guardar un valor.

  • VALUES: palabra clave que precede a la lista de valores.

  • (’Luis’,’Del Morán’,38): valores que han entrado en el mismo...

SQL avanzado

1. Las funciones e instrucciones SQL

El objetivo de esta sección no es que aprenda todas las funciones SQL, sino solo las más utilizadas.

Para el resto de esta sección, la tabla Persona contiene estos datos:

images/07-47.png

a. Limitar datos

La instrucción que permite limitar el número de registros devueltos por SELECT es: LIMIT número_registros.

Por ejemplo:

SELECT * FROM Persona ORDER BY Nombre LIMIT 3 

Esta consulta significa: leer los tres primeros registros que contienen todos los campos de la tabla Persona ordenados por Nombre.

Copie esta consulta en la pestaña SQL de phpMyAdmin y haga clic en Continuar:

images/07-48.png

También puede añadir el número de registro con el que quiere recuperar datos agregando este número antes del número de registros.

Por ejemplo, para recuperar los registros de la quinta a la sexta, ambas incluidas:

SELECT * FROM Persona ORDER BY Nombre LIMIT 4,2 

Copie esta consulta en la pestaña SQL de phpMyAdmin y haga clic en Continuar:

images/07-49.png

b. Valores distintos

La instrucción que permite recuperar únicamente los valores de registros distintos devueltos por SELECT es DISTINCT.

Por ejemplo:

SELECT DISTINCT Nombre FROM Persona ORDER BY Nombre 

Copie esta consulta en la pestaña SQL de phpMyAdmin y haga clic en Continuar:

images/07-50.png

En realidad, dos personas se llaman Martín pero este nombre sólo aparece una vez con la palabra clave DISTINCT.

c. Convertir en mayúsculas

La instrucción que permite convertir el valor de un campo en mayúsculas es UPPER(nombre_del_campo).

Por ejemplo, para mostrar el apellido en mayúsculas:

Select Nombre, UPPER(apellidos) FROM Persona ORDER BY Nombre 

Copie esta consulta en la pestaña SQL de phpMyAdmin y haga clic en Continuar:

images/07-51.png

Puede crear un alias para UPPER(apellidos) de esta manera:

Select Nombre, UPPER(apellidos) as Apellidos_en_Mayúsculas FROM Persona 
ORDER BY Nombre 

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:

images/07-52.png

d. Convertir en minúsculas

La instrucción que permite convertir en minúsculas el valor de un campo es LOWER(nombre_del_campo).

Por ejemplo, para mostrar los apellidos en minúsculas:

Select Nombre, LOWER(Apellidos) as Apellidos_en_Minúsculas FROM Persona 
ORDER BY Nombre 

Copie esta consulta en la pestaña SQL de phpMyAdmin y haga clic en Continuar:

images/07-53.png

e. Redondear un número...

Ejercicios SQL

Para realizar estos ejercicios, la tabla Persona y la tabla Idiomas se tienen que crear en la base de datos _prueba. Estas tablas contienen los siguientes datos:

Tabla Persona:

images/n7-87.png

Tabla Idiomas:

images/n7-88.png

El script SQL que permite crear las tablas con sus datos es:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";  
 
-- Base de datos: `_prueba`  
 
-- --------------------------------------------------------  
 
-- Estructura de la tabla `idioma`  
 
DROP TABLE IF EXISTS Idiomas;  
CREATE TABLE IF NOT EXISTS Idiomas (  
  Id int(11) NOT NULL AUTO_INCREMENT,  
  Etiqueta varchar(20) NOT NULL,  
  PRIMARY KEY (Id)  
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;  
 
-- Contenido de la tabla `idioma`  
 
INSERT INTO Idiomas (Id, Etiqueta) VALUES  
(1, 'Francés'),  
(2, 'Inglés'),  
(3, 'Alemán'),  
(4, 'Ruso');  
 
-- --------------------------------------------------------  
 
-- Estructura de la tabla `persona`  
 
DROP TABLE IF EXISTS Persona;  
CREATE TABLE IF NOT EXISTS Persona (  
  Id_persona int(11) NOT NULL AUTO_INCREMENT,  
  Nombre varchar(20) NOT NULL,  
  Apellidos varchar(20) NOT NULL,  
  Edad int(11) NOT NULL,  
  Id_idioma int(11) NOT NULL,  
  PRIMARY KEY (Id_persona)  ...

Acceso a las bases de datos con PHP

1. Introducción

Hemos visto anteriormente las diferentes consultas SQL; vamos a ver ahora cómo se ejecutan en PHP y a mostrar el resultado.

En esta parte del capítulo aprenderá a leer, insertar, modificar y eliminar datos desde formularios PHP.

Partiremos de la siguiente estructura de la tabla Persona.

images/07-100.png

Y también los siguientes datos:

images/n7-99.png

Hay dos extensiones que utilizan las funciones para acceder a MySQL. Son mysql_ y mysqli_. Estas dos extensiones son muy similares, pero mysqli_ es más reciente (versión 5 de PHP) y tiene algunas funcionalidades complementarias. Por lo tanto, utilizaremos mysqli_ en lo que queda de capítulo. En una próxima sección, presentaremos la extensión PDO (PHP Data Object). Es una extensión aún más reciente y completa a la hora de utilizar objetos.

2. Conexión

La función que permite conectarse a MySQL es mysqli_connect().

Esta función toma como argumentos:

  • El host: cadena de caracteres que contiene el nombre o la dirección IP del host, que corresponde a "localhost" o 127.0.0.1 si trabaja en modo local.

  • El usuario: cadena de caracteres que contiene el nombre de usuario para conectarse a la base de datos. Corresponde a "root" si trabaja en modo local. Tenga cuidado, ya que este usuario tiene todos los derechos sobre su base de datos.

  • La contraseña: cadena de caracteres que contiene la contraseña asociada al usuario. Por defecto se encuentra vacía.

  • El nombre de la base de datos: cadena de caracteres opcional que contiene el nombre de su base de datos.

  • El puerto: número de puerto opcional para conectarse al servidor MySQL, que por defecto equivale a 3306.

Esta función devuelve falso en caso de error, o un objeto mysqli que contiene el identificador de conexión en caso de éxito.

Por ejemplo:

<?php 
  $connect = mysqli_connect("127.0.0.1", "root", "", "_prueba"); 
?> 

Otro ejemplo que gestiona los errores es:

<?php 
 
$base = mysqli_connect("127.0.0.1", "root", "", "_prueba"); 
if ($base) { 
  echo 'Conexión realizada.<br />'; 
  echo 'Información sobre el servidor:'.mysqli_GET_host_info($base); 
} 
else { 
 ...

PDO

En esta parte, vamos a poner en práctica algunas nociones de PDO. Para la correcta compresión de su sintaxis, es preciso asimilar los conceptos que se explican en el capítulo El objeto.

1. Introducción

PDO (PHP Data Object) es una librería de funciones PHP que permite acceder a cualquier base de datos, ya que aporta una capa de abstracción al acceso a las bases de datos. Es un lenguaje orientado a objetos, aunque el funcionamiento no es muy distinto al de mysqli. Siempre se debe escribir la consulta y ejecutarla.

Para activar esta librería, abra el archivo php.ini, al que se accede con el menú Configuration, PHP. A continuación, compruebe que no hay ningún punto y coma delante del registro:

images/7_100.png

Esta librería se escribe en lenguaje objeto; por lo tanto, la sintaxis puede ser confusa. En el capítulo El objeto se explica más detalladamente la programación orientada a objetos.

Como requisito, es preciso haber creado la tabla Persona.

images/n7-102.png

Y también los siguientes datos:

images/n7-103.png

La sección phpMyAdmin explica cómo debe crear la base con los datos.

2. Conexión

Para conectarse a base de datos MySQL, debe crear una instancia de la clase PDO, es decir, crear un objeto que es un elemento de la clase PDO, pero con algunos argumentos. Este concepto se explica de manera más concreta en el capítulo sobre El objeto.

El objeto que permite conectarse a MySQL es PDO().

Este objeto toma como argumentos:

  • La cadena de conexión: cadena de caracteres que contiene el SGBD utilizado y el nombre o la dirección IP del host, que corresponde a "localhost" o 127.0.0.1 si trabaja en modo local. Esta cadena también contiene el nombre de la base de datos.

  • El usuario: cadena de caracteres que contiene el nombre de usuario para conectarse a la base de datos. Si trabaja en modo local, corresponde a "root". Atención, este usuario tiene todos los derechos sobre su base de datos.

  • La contraseña: cadena de caracteres que contiene la contraseña asociada al usuario. Por defecto está vacía.

Por ejemplo, para conectarse a la base de datos _prueba:

<?php 
$base = new PDO('mysql:host=127.0.0.1;dbname=_prueba', 'root', ''); 
?> 

La variable $base es un objeto; por lo tanto, no puede mostrar su valor.

Para comprobar si el código ha generado un error...

Ejercicios

1. Enunciados

Ejercicio 1 (fácil): Página de conexión

Cree una página login.php que contenga un área login y una zona password con un botón de tipo submit. Esta página llama a comprobar_login.php, que comprueba si el login y la contraseña se encuentran en la base de datos. Retome el ejercicio 1 del capítulo Transmitir datos de una página a otra y modifique la página verif_login.php para mostrar "login correcto" si la persona se halla en la base de datos o para que se redireccione a la página login.php en caso contrario. También debe crear una tabla inicio de sesion_password que contenga el Id, el login y la contraseña.

images/7_107.png

Ejercicio 2 (medio): Formulario de inscripción

Este ejercicio requiere buenos conocimientos en JavaScript o en HTML5.

Cree una página inicio.php que permita solicitar la inscripción a formación.

images/cap07img01.png

Todos los campos son obligatorios. este enlace muestra un pdf que contiene las condiciones generales y es necesario haber pulsado sobre el enlace y después marcar la casilla de selección para poder enviar el formulario.

A continuación debe crear una página conexion.php encargada de realizar la conexión a la base de datos y después una página insertar.php que compruebe si la persona todavía no está registrada con su email y almacene los datos del formulario en la base de datos. Esta página también debe comprobar los errores y devolver un mensaje en la página inicio.php.

Se propone otros ejercicios relacionados con las base de datos al final de este libro.

2. Soluciones

Solución del ejercicio 1

En este ejemplo el login es Estefania y la contraseña es Morales_HH.

  • Cree la base de datos _prueba.

  • El script SQL de creación de la tabla inicio de sesion_password es:

CREATE TABLE usuario_password (   
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
usuario VARCHAR( 20 ) NOT NULL ,  
Password VARCHAR( 20 ) NOT NULL   
) ENGINE = MYISAM ; 
  • login.php:

<!DOCTYPE html>  
<html lang="es"> 
   <head>  
       <title>Ejercicio login</title>  
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
   </head>  ...