Está en la página 1de 14

PHP y MySQLDomine el desarrollo de un sitio

web dinmico e interactivo (2 edicin)


Este libro sobre PHP y MySQL va dirigido a los diseadores y desarrolladores que desean
utilizar PHP y MySQL para desarrollar un sitio web dinmico e interactivo.
En la primera parte del libro, el autor presenta la implementacin de una base de datos
MySQL: lenguaje SQL (Structured Query Language), utilizacin de las funciones MySQL y
contruccin de una base de datos (tablas, ndices y vistas) sin olvidar las tcnicas avanzadas
como la bsqueda en texto integral o el desarrollo de procedimientos almacenados.
En la segunda parte del libro, despus de una presentacin de lasfuncionalidades bsicas
del lenguaje PHP, el autor se centra en lasnecesidades especficas del desarrollo de
sitios dinmicos e interactivosenfocado en aportar respuestas detalladas y completas a las
problemticas habituales: gestin de formularios, gestin de sesiones, envo de correos
electrnicos
y,
por
supuesto,
acceso
a
una
base
de
datos
MySQL.
Con abundantes ejemplos comentados, este libro (escrito en las versions 5.5 de PHP y 5.6 de
MySQL)
es
a
la
vez
completo
y
resumido
y
le
facilita
la
prctica.
Hay

elementos

adicionales

disponibles

para

su

descarga

en

esta

pgina.

Los
captulos
del
libro:
Introduccin - Introduccin a MySQL - Utilizar las funciones MySQL - Construir una base de
datos en MySQL - Tcnicas avanzadas con MySQL - Introduccin a PHP - Utilizar las funciones
PHP - Escribir funciones y clases PHP - Gestionar los errores en un script PHP - Gestionar los
formularios y los vnculos con PHP - Acceder a una base de datos MySQL - Gestionar las
sesiones - Anexos

Olivier HEURTEL
Despus de ocho aos pasados en una empresa de servicios, donde ha ocupado con xito los puestos de Desarrollador,
Jefe de Proyecto y finalmente Director de Proyectos, Olivier HEURTEL ha iniciado una actividad de
Consultor/Formador independiente especializado en bases de datos (Oracle), desarrollo Web (PHP) y sistemas
decisionales. Est certificado como Oracle Certified Professional.

Objetivo de la obra
El objetivo de este libro es iniciar al lector en el desarrollo de un sitio web dinmico e
interactivo mediante PHP y MySQL.
Para alcanzar este objetivo, este libro estudia con detalle los elementos necesarios para la
programacin de un sitio web dinmico e interactivo:

utilizacin del lenguaje SQL (Structured Query Language - lenguaje estndar de acceso a
bases de datos relacionales) para consultar y modificar los datos de una base de datos
MySQL;

creacin de una base de datos MySQL;

utilizacin de las caractersticas bsicas del lenguaje PHP;

acceso a una base de datos MySQL a partir de PHP;

gestin de los formularios;

gestin de las sesiones (autenticacin, gestin de un contexto, utilizacin de las


cookies);

envo de un mensaje electrnico (incluido el envo en formato HTML y con archivos


adjuntos);

gestin de los archivos, incluida la transferencia de archivos desde el equipo del usuario
hacia el servidor ("file upload").

Esta obra se dirige a gestores de proyectos, diseadores o desarrolladores con un conocimiento


bsico de la programacin web en HTML.
Este libro se centra en la versin 5.5 de PHP y la versin 5.6 de MySQL.

Breve historia de PHP y MySQL


1. PHP
El lenguaje PHP (histricamente Personal Home Page; oficialmente, acrnimo de Hypertext
Preprocessor) fue creado en 1994 por Rasmus Lerdorf para sus proyectos personales antes de
publicarse a principios de 1995.
En el ao 1995 se public una nueva versin, completamente reescrita, con el nombre de
PHP/FI versin 2. Esta versin, capaz de gestionar los formularios y de acceder a la base
mSQL, permiti al lenguaje desarrollarse rpidamente.
En 1997, un equipo formado en torno a Rasmus Lerdorf se hizo cargo del desarrollo del
lenguaje dando como resultado la salida de la versin 3.
En 2000, el analizador de PHP migr al motor de anlisis de Zend para ofrecer un mejor
rendimiento y soportar un mayor nmero de extensiones: era la versin 4 de PHP.
La versin 5 naci en 2004. Esta nueva versin, basada en la versin 2 del motor de Zend,
aport varias novedades, la mayor parte relacionada con la programacin orientada a objetos.
En junio de 2013, se lanz la versin 5.5.
Actualmente, los analistas estiman que PHP es utilizado por ms del 80 % de sitios web en el
mundo (en nmero de dominios).

2. MySQL
MySQL es el sistema de administracin de bases de datos relacionales (RDBMS) de cdigo
abierto ms extendido del mundo. Est desarrollado por MySQL AB, una empresa sueca.
La primera versin de MySQL apareci en 1995. Esta primera versin fue creada para un uso
personal a partir de mSQL.

En 2000, la versin 3.23 pas a tener licencia GPL (General Public License).
En 2003, la versin 4, aparecida en 2001, se declar estable. Esta versin aport numerosas
funcionalidades y mejoras: operador UNION, DELETE para varias tablas, nuevas opciones para
la gestin de los privilegios, mejora del rendimiento, subconsultas (4.1), etc.
En 2005, la versin 5, aparecida en 2003, se declar estable. Esta destacada versin introdujo
numerosas caractersticas que faltaban en MySQL: rutinas, triggers, vistas.
A inicios de 2013, se distribuy la versin 5.6.
MySQL est disponible con dos licencias diferentes:

La licencia GPL.

Una licencia comercial.

Si usted utiliza MySQL en un producto no comercial, puede utilizar MySQL con su licencia GPL
(versin MySQL Community Server). Si utiliza MySQL en un producto comercial, o si desea
tener asistencia tcnica para el programa, debe adquirir una licencia comercial (versin MySQL
Enterprise).

nde conseguir PHP y MySQL


Existen numerosos sitios web dedicados al lenguaje PHP y a MySQL. Permiten descargar los
productos, consultar ejemplos de scripts o intervenir en foros:

Direccin

Contenido

www.php.net

Sitio web oficial de PHP que ofrece la


descarga de PHP y un manual de referencia
en lnea muy til. Puede ir directamente a
la direccin www.php.net/nombre_funcin
para acceder a la ayuda en lnea de una
funcin PHP.

www.mysql.com

Sitio web oficial de MySQL que ofrece la


descarga de MySQL, ayuda en lnea,
artculos, un foro, etc.

http://www.programacion.com/php/

Sitio web en espaol dedicado a PHP que


ofrece noticias, manuales, as como un foro
de discusin.

www.zonaphp.com

Otro sitio web en espaol dedicado a PHP


en formato blog.

www.zend.com

Sitio oficial del motor de script Zend que


tambin tiene los clsicos apartados de
descarga, ejemplos, foro

www.easyphp.org

Sitio web en ingls y francs que ofrece


gratuitamente un producto instalable
(EasyPHP) para la plataforma Windows.
Este producto incluye: un servidor Apache,
PHP y MySQL. Slo hay que descargar el
producto y hacer doble clic en el ejecutable
que instala los diferentes elementos. Cinco
minutos despus, su entorno PHP-MySQL
es operativo. Este sitio web es interesante
para quienes deseen montar rpidamente
una configuracin operativa completa en
Windows.

http://www.apachefriends.org/en/xampp.html

Otro sitio web que ofrece un producto


instalable (XAMPP) en diferentes
plataformas (Linux, Windows, Solaris,
Mac OS X). Este producto incluye, entre
otras cosas, un servidor Apache, PHP y
MySQL. La instalacin es muy sencilla y
rpida.

Obviamente, esta lista no es exhaustiva, pero todos los sitios web presentes ofrecen numerosos
vnculos hacia otros sitios. No lo dude y navegue por ellos.

Todos los ejemplos de este libro han sido probados con XAMPP Linux 1.8.3 (MySQL 5.6.12 y
PHP 5.5.3).

Convenciones de escritura
1. PHP
La sintaxis de las funciones PHP se describe de la siguiente manera en este libro:
tipo_retorno nombre_funcin(tipo_parmetro nombre_parmetro)

tipo_retorno

Tipo de retorno de la funcin.

nombre_funcin

Nombre de la funcin.

tipo_parmetro

Tipo del parmetro aceptado por la funcin.

nombre_parmetro

Nombre dado al parmetro.

Los tipos de datos posibles se presentarn en el captulo Introduccin a PHP. En el caso en el


que la funcin acepte un parmetro de cualquier tipo, se utiliza el trmino mixto.
Si la funcin no devuelve ningn valor, la informacin tipo_retorno, se omite.
Ejemplo
nombre_funcin(tipo_parmetro nombre_parmetro)
Si
la
funcin
no
toma
ningn
informacin tipo_parmetro y nombre_parmetro se omiten.

parmetro,

la

Ejemplo
tipo_retorno nombre_funcin()
Los parmetros opcionales se indican entre corchetes ( []).
Ejemplo
tipo_retorno nombre_funcin([tipo_parmetro nombre_parmetro])
Si la funcin acepta varios parmetros, estos ltimos se indican, separados por una coma,
segn la misma convencin.

Ejemplo
tipo_retorno
nombre_funcin(tipo_parmetro_1
tipo_parmetro_2 nombre_parmetro_2)

nombre_parmetro_1,

Si un parmetro puede repetirse un nmero indeterminado de veces, detrs figurar la


indicacin [,].
Ejemplo
tipo_retorno nombre_funcin(tipo_parmetro nombre_parmetro [,...])

2. MySQL
La sintaxis de las sentencias SQL se describe de la siguiente manera en este libro:

PALABRA EN
MAYSCULAS

Palabras clave del comando (CREATE TABLE, por ejemplo). En la prctica,


puede introducirse indistintamente en maysculas o en minsculas.

palabra en
minsculas

Valores que deben introducirse relativos a la base de datos o a la aplicacin


(nombre de tabla, nombre de columna, etc.). Segn el caso, estos valores
distinguen entre maysculas/minsculas (vase Introduccin a MySQL PhpMyAdmin).

[]

Clusula opcional.

[,...]

La clusula anterior puede repetirse varias veces.

Indica una eleccin entre varias opciones.

{}

Delimita una lista de opciones.

palabra
subrayada

Valor predeterminado.

palabra en
cursiva

Clusula del comando cuya sintaxis se detalla aparte.

Introduccin a las bases de datos relacionales


1. Conceptos
Una base de datos es un conjunto de datos estructurados que corresponden normalmente a un
mbito funcional (facturacin, recursos humanos, etc.). Fsicamente, una base de datos se
corresponde con un cierto nmero de archivos almacenados en un dispositivo de
almacenamiento.
Los datos de una base de datos son gestionados por un programa llamado Sistema de Gestin
de Base de Datos (SGBD). Este programa ofrece diferentes caractersticas: acceso a los datos,
gestin de las actualizaciones, mejora de la integridad, control de la seguridad de acceso, etc.
Una base de datos relacional presenta una organizacin de los datos basada en el modelo
relacional, desarrollado en 1970 por Edgar Frank Codd. Es la estructura ms extendida
actualmente.
En una base de datos relacional, los datos se organizan en tablas enlazadas de manera lgica.
Una tabla incluye columnas (o campos) que describen una fila (o registro). La relacin entre las
tablas se establece mediante una columna.
Ejemplo
libro
+----+--------------------------------+---------------+
| id | titulo

| id_coleccion

+----+--------------------------------+---------------+
|

1 | PHP 5.2 - Desarrollo web

1 |

2 | Oracle 10g - Administracin

1 |

3 | Oracle 10g - Recovery Manager

2 |

4 | BusinessObjects 6

1 |

5 | MySQL 5 - Instalacin

1 |

6 | PHP y MySQL (versiones 4 y 5)

3 |

7 | MySQL 5 y PHP 5

4 |

+----+--------------------------------+---------------+
coleccion
+----+--------------------------+
| id | nombre

+----+--------------------------+
|

1 | Recursos informticos

2 | TechNote

3 | Prcticas tcnicas

4 | Pack Tcnico

+----+--------------------------+

En
este
ejemplo,
las
tablas libro y coleccion estn
vinculadas
columnas id_coleccin de la tabla libro e id de la tabla coleccion.

por

las

La interaccin con una base de datos relacional se realiza gracias al lenguaje SQL (Structured
Query Language). Este lenguaje permite la lectura y la actualizacin de los datos, as como la
definicin de la organizacin de los datos, la gestin de la seguridad, la mejora de la
integridad, etc. El lenguaje SQL es un lenguaje normalizado, pero los diferentes editores de
bases de datos no respetan ntegramente el estndar.

2. Principios de creacin de una base de datos


La creacin de una base de datos es un tema complejo; aqu abordaremos slo los principios
bsicos, con un enfoque ms prctico que terico.
En una base de datos relacional, el objetivo es almacenar en diferentes tablas los datos
correspondientes a diferentes entidades (objetos) del mbito funcional. El objetivo es evitar las
redundancias y hacer que un determinado dato no sea almacenado ms que una vez. En
nuestro ejemplo anterior, los datos sobre el autor de un libro no se almacenan en la tabla libro;
el autor de un libro es una entidad funcional por s sola y se almacena en una tabla separada.
Este proceso de separacin de los datos en varias tablas se llama "normalizacin".

Una normalizacin llevada al extremo puede afectar al rendimiento de las consultas que deben
leer un gran nmero de tablas. Para mejorar el rendimiento de las lecturas, es posible
invertir el proceso de normalizacin del modelo, agrupando tablas, a riesgo de tener datos
redundantes en las diferentes filas. Las bases de datos de los sistemas de toma de decisiones,
que realizan sobre todo consultas normalmente complejas, siguen a menudo este
procedimiento. Al contrario, las bases de datos de los sistemas transaccionales, que efectan
principalmente pequeas consultas sencillas y muchas actualizaciones, respetan el principio de
normalizacin.
En una base de datos relacional, cada tabla almacena la informacin relativa a un objeto de
trabajo concreto o abstracto que debe ser identificado.
En la tabla, cada columna almacena informacin unitaria (atributo, propiedad) que caracteriza
una fila de la tabla. Cada columna posee un tipo de datos (entero, cadena de caracteres, fecha,
etc.) y puede ser obligatorio o no.
Una columna o combinacin de columnas que identifica de manera nica una fila de una tabla
se denomina clave candidata. El valor de una clave candidata es diferente para todas las filas
de la tabla (no puede repetirse en ningn caso). Una clave candidata puede estar constituida
por una columna arbitraria utilizada especficamente para ello.
La clave primaria de una tabla es una de las claves candidatas de la tabla, elegida ms o
menos arbitrariamente, pues la clave primaria debe ser tambin obligatoria: hay una nica
clave primaria por tabla. Las otras claves candidatas de la tabla se denominan claves nicas.
Una columna o combinacin de columnas de una tabla que hace referencia a una clave
candidata de otra tabla (normalmente, la clave primaria) se denomina clave externa. Una tabla
puede tener varias claves externas.

Ejemplo

El esquema anterior presenta el modelo de la base de datos utilizada en este libro. Este
modelo es un modelo simplificado de gestin de los libros de una editorial.
Este modelo incluye las siguientes tablas:

autor

Autores de los libros.

tema

Temas que permiten la clasificacin de los libros en diferentes categoras (base de

datos, lenguaje de programacin, etc.). Los temas se organizan en dos niveles: tema
principal y subtema. Un subtema est asociado a un tema primario por mediacin
de la columnaid_primario. Para un tema primario, la
columna id_primarioest vaca.

coleccion

Colecciones de los libros que publica la editorial.

promocion

Promociones de los libros.

libro

Libros publicados por la editorial.

autor_libro

Relacin entre los autores y los libros: un autor puede escribir varios libros y un
libro puede tener varios autores.

tema_libro

Relacin entre los temas y los libros: un tema puede englobar varios libros y un
libro puede abarcar varios temas.

En todas las tablas, con la excepcin de autor_libro y tema_libro, la clave primaria es la


columna id. Para las tablas autor_libro y tema_libro, la clave primaria es la combinacin
de las dos columnas:id_autor,id_libro e id_tema,id_libro, respectivamente.
En el estado actual, hay una clave nica en la columna nombre de la tabla coleccion. En el
captulo Construir una base de datos en MySQL, aadiremos claves nicas en otras tablas.
La tabla libro incluye dos claves externas: id_coleccion (hacia la tabla coleccion)
eid_promocion (hacia la tabla promocion).
La tabla autor_libro incluye dos
e id_libro (hacia la tabla libro).
La tabla tema_libro incluye dos
e id_libro (hacia la tabla libro).

claves

claves

externas: id_autor (hacia

la

externas: id_tema (hacia

la

tabla autor)

tabla tema)

La tabla tema incluye una clave externa: id_primario (hacia la tabla tema).

Trabajar con MySQL


1. Administracin del servidor MySQL
Despus de instalar MySQL, podemos administrar el servidor MySQL con la cuenta de superusuario root(nada que
ver con la cuenta root en Unix o Linux).

Inicialmente, la cuenta root no tiene contrasea y dispone de todos los privilegios sobre todas las bases de datos del
servidor MySQL. En cambio, slo puede conectarse localmente (a partir del mismo servidor).
En el captulo Construir una base de datos en MySQL, veremos cmo crear otros usuarios y asignarles privilegios.

2. Interfaz de la lnea de comandos


La aplicacin cliente mysql es un programa interactivo que permite conectarse a un servidor MySQL y ejecutar
consultas en dicho servidor. Esta aplicacin se encuentra en el directorio bin de su instalacin MySQL.
Sintaxis
mysql [-h host] [-u usuario] [-p[contrasea]] [nombre_base]

-h host

Host al que debe conectarse (equipo local predeterminado).

-u usuario

Nombre de usuario para la conexin (nombre del usuario actual del sistema
operativo de manera predeterminada).

p[contrasea]

Contrasea para la conexin (ninguna contrasea predeterminada). Si no se


introduce en la lnea de comandos, se solicitar de manera interactiva, como
cualquier contrasea. Si se especifica la contrasea en la lnea de comandos (lo
que no se recomienda por razones de seguridad), no debe haber ningn espacio
tras la opcin -p.

nombre_base

Base seleccionada de entrada (ninguna predeterminada).

Ejemplo
[root@xampp ~]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.12 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights
reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective owners.

Type help; or \h for help. Type \c to clear the current input


statement.

mysql>
En este ejemplo, la conexin se realiza localmente, sin contrasea, como usuario root. Como el usuario actual
es root en el sistema operativo, puede obtenerse el mismo resultado escribiendo simplemente el comando mysql:
[root@xampp ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
...
Si se requiere una contrasea y no desea introducirla en la lnea de comandos, puede utilizar el comando siguiente para
conectarse:
[root@xampp ~]# mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
...
Si se requiere una contrasea e intenta conectarse sin contrasea, obtendr un error:
ERROR 1045 (28000): Access denied for user root@localhost
(using password: NO)
Asimismo, si intenta conectarse a partir de un equipo que no est autorizado, obtendr un error similar.
En la interfaz de la lnea de comandos podr introducir comandos del cliente mysql, o bien consultas SQL.
Los comandos del cliente mysql son interpretados directamente por el cliente mysql. Este comando debe escribirse
en una sola lnea y la utilizacin del punto y coma al final del comando es innecesaria. Los comandos del
cliente mysql no son sensibles a las maysculas y minsculas, y pueden introducirse, por lo tanto, de las dos formas.
Las consultas SQL se envan al servidor para su ejecucin. Un consulta SQL puede escribirse en varias lneas y debe
terminarse mediante un punto y coma. Los comandos del cliente mysql no son sensibles a las maysculas y
minsculas, y pueden introducirse, por lo tanto, de las dos formas.
Los comandos del cliente mysql ms utilizados son los siguientes:

exit o quit

Sale de la aplicacin.

use nombre_base

Utiliza otra base de datos.

source archivo_script

Ejecuta un script SQL.

delimiter caracteres

Modifica el delimitador utilizado para terminar una consulta SQL.

Ejemplo
[root@xampp ~]# mysql -u root
Welcome to the MySQL monitor.

Commands end with ; or \g.

...

mysql> use information_schema


Database changed

mysql> SELECT schema_name FROM schemata;


+--------------------+
| schema_name

+--------------------+
| information_schema |
| cdcol

| mysql

| performance_schema |
| phpmyadmin

| test

+--------------------+
6 rows in set (0.01 sec)

mysql> exit
Bye
[root@xampp ~]#
Ms adelante, explicaremos la sintaxis de la sentencia SQL SELECT, as como la base de
datosinformation_schema.

Existe tambin una sentencia USE equivalente al comando use.

3. MySQL Workbench
MySQL Workbench es una aplicacin grfica que permite editar y ejecutar consultas SQL en
una base de datos MySQL as como administrar sus bases de datos.
Puede
descargar
MySQL
Workbench
en
la
siguiente
direccin:http://dev.mysql.com/downloads/tools/workbench. El producto est disponible para
las plataformas Windows, Linux y Mac OS X.

Cuando inicia la aplicacin, se muestra la siguiente ventana de inicio:

Con un clic en el icono ubicado al lado del texto MySQL Connections podr crear una nueva
conexin a travs del siguiente cuadro de dilogo:

También podría gustarte