curso de php-2. accesos a bases de datos. luis bonilla de php-2. accesos a... · las relaciones...

43
Curso de PHP II. Acceso a Bases de Datos. MySQL.

Upload: lyngoc

Post on 04-Feb-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II.

Acceso a

Bases de Datos.

MySQL.

Page 2: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 2 de 43

Índice Capítulo 1. Introducción. ......................................................................... 4

1.- Conceptos básicos........................................................................................... 4

Capítulo 2. El Modelo Entidad/Relación................................................. 5 1.- Introducción. .................................................................................................. 5 2.- Entidades. ....................................................................................................... 5 3.- Atributos......................................................................................................... 5 4.- Relaciones entre entidades. ............................................................................. 6 5.- Paso a tablas. .................................................................................................. 7 6.- Dominios. ..................................................................................................... 11

Capítulo 3. El lenguaje SQL. ................................................................. 14 1.- Introducción. ................................................................................................ 14 2.- Sintaxis básica de las órdenes SQL. .............................................................. 14 3.- Contenido de la Base de Datos...................................................................... 14 4.- Ejemplos de “SELECT”................................................................................ 15 5.- Ejemplos de “INSERT” ................................................................................ 17 6.- Ejemplos de “UPDATE” .............................................................................. 18 7.- Ejemplos de “DELETE” ............................................................................... 19

Capítulo 4. phpMyAdmin: MySQL. ..................................................... 21 1.- Introducción. ................................................................................................ 21 2.- Instalación. ................................................................................................... 21 3.- phpMyAdmin. .............................................................................................. 23

Capítulo 5. Conexión y Desconexión a una Base de Datos. .................. 37 1.- Introducción. ................................................................................................ 37 2.- Establecer la conexión. ................................................................................. 37 3.- Control básico de errores. ............................................................................. 38 4.- Desconexión de la Base de Datos.................................................................. 38

Capítulo 6. Acceso a la Base de Datos. .................................................. 39 1.- Obtención de Datos....................................................................................... 39 2.- Insertar nuevos datos. ................................................................................... 39 3.- Modificar datos existentes............................................................................. 41 4.- Borrar datos. ................................................................................................. 42

Page 3: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 3 de 43

Índice de Ilustraciones Ilustración 1. Entidades .................................................................................................5 Ilustración 2. Atributos..................................................................................................6 Ilustración 3. Claves de una entidad. .............................................................................6 Ilustración 4. Relación Unaria .......................................................................................7 Ilustración 5. Relación Binaria ......................................................................................7 Ilustración 6. Relación Ternaria ....................................................................................7 Ilustración 7. Relación Binaria 1:1 ................................................................................8 Ilustración 8. Ejemplo de Relación Binaria 1:1..............................................................9 Ilustración 9. Relación Binaria 1:N ...............................................................................9 Ilustración 10. Ejemplo de Relación Binaria 1:N......................................................... 10 Ilustración 11. Relación Binaria N:N........................................................................... 10 Ilustración 12. Ejemplo de Relación Binaria N:N ........................................................ 11 Ilustración 13. Diseño del ejercicio de ejemplo. .......................................................... 12 Ilustración 14. Ejemplo de ejecución inicial de PHP en http://localhost ....................... 23

Page 4: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 4 de 43

Capítulo 1. Introducción.

1.- Conceptos básicos. En la primera parte de este curso de PHP estudiamos cómo hacer una página

dinámica, en la cual la página Web que el usuario veía podía contener una o otra información en función de lo que quisiéramos mostrarle. Es esta segunda parte vamos a aprender cómo obtener el contenido de la página que mostraremos al usuario a partir de una Base de Datos, en concreto usaremos el Sistema Gestor de Bases de Datos “MySQL”.

Para comenzar el curso nos centraremos en el lenguaje de acceso a datos SQL, basándonos en un ejemplo muy simple con sólo dos tablas de datos. Este ejemplo será usado durante todo el curso para el desarrollo del mismo.

En este capítulo instalaremos el gestor de Bases de Datos “MySQL” y aprenderemos a crear las tablas, sus campos, introducir datos, importar/exportar datos, etc. Esto último es muy importante porque nos servirá para poder exportar la Base de Datos que hayamos creado en nuestro ordenador (junto a las páginas PHP) al servidor que tengamos en Internet.

El siguiente capítulo tratará de cómo conectarnos a la Base de Datos. Esto lo haremos desde PHP con los comandos necesarios.

Finalmente accederemos a la Base de Datos para realizar en ella las operaciones básicas de acceso: seleccionar/buscar datos, insertar nuevos datos, borrar datos y finalmente modificar los datos ya existentes.

Page 5: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 5 de 43

Capítulo 2. El Modelo Entidad/Relación.

1.- Introducción. Antes de pasar a implementar la Base de Datos en un Sistema Gestor de Base de

Datos como puede ser MySQL deberemos realizar un diseño correcto de la misma, por que si el diseño es incorrecto (o inexistente) la Base de Datos tendrá errores que nos dificultarán su uso, y sobre todo nos complicarán mucho cualquier modificación posterior.

Como MySQL es un Sistema Gestor de Bases de Datos Relacional usaremos en modelo Entidad/Relación (E/R) para realizar el análisis inicial.

Un consejo muy importante es realizar este diseño en papel (usando los dibujos que a continuación se explicarán) por que visualmente resulta mucho más sencillo de entender.

2.- Entidades. Entenderemos como “entidad” como cualquier objeto real o abstracto sobre el

cual deseamos guardar información. Por ejemplo, podríamos tener las siguientes entidades: persona, alumno, cliente,

factura, población, etc. Su representación en el modelo E/R es mediante un rectángulo dentro del cual

aparecerá el nombre de dicha entidad. Como norma que se seguirá en este curso, el nombre aparecerá en mayúsculas y en plural.

Ejemplos:

Ilustración 1. Entidades

3.- Atributos. Las entidades se componen de atributos que son cada una de las propiedades o

características que tienen las entidades. Cada ejemplar de una misma entidad posee los mismos atributos, tanto en nombre como en número, diferenciándose cada uno de los ejemplares por los valores que toman dichos atributos.

Por ejemplo, para la entidad “persona” aparecida en el apartado anterior podríamos tener los siguientes atributos: nombre, apellidos, sexo, fecha de nacimiento, DNI, etc.

Los atributos aparecerán representados mediante una elipse, y una línea que une al atributo con su correspondiente entidad.

Ejemplos:

Page 6: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 6 de 43

Ilustración 2. Atributos

3.1.- Claves. Cuando uno de los atributos de una entidad no puede tomar valores repetidos

entonces hablaremos de atributos clave. Un ejemplo de esto sería el atributo DNI en la entidad “personas”: no podremos

tener dos personas con el mismo DNI. Las claves pueden ser simples (como el ejemplo del DNI) o compuestas: en la

entidad “personas” si suponemos que no puede haber dos personas con el mismo “nombre y apellidos” entonces la clave es compuesta.

Puede darse el caso de que tengamos dos posibles claves o más, entonces una de ellas será la clave principal, y la otra u otras serán claves alternativas. Esto es importante, pues en el posterior diseño de la Base de Datos habrá que indicárselo al Sistema Gestor de Bases de Datos (de una forma muy sencilla, como ya veremos).

Una vez decidida cual es la lave principal y cual/es la/s alternativa/s deberemos indicarlo en el diseño E/R de la siguiente forma:

Clave principal: la subrayaremos. Claves alternativas: las subrayaremos, pero de forma discontinua. Veamos un ejemplo con la entidad “alumnos”. Para esta entidad vamos a tener los

siguientes atributos: DNI, Num.Expediente, Nombre, Apellidos, Sexo. Una vez tenemos los atributos observamos que tenemos dos posibles claves: DNI

y Num.Expediente. Decidimos que la clave principal será DNI, y la alternativa Num.Expediente. La representación sería la siguiente:

Ilustración 3. Claves de una entidad.

4.- Relaciones entre entidades. Como ya se ha comentado, estamos usando el modelo relacional, el cual se basa

en que todas las entidades están relacionadas.

Page 7: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 7 de 43

Por ejemplo, en una Base de Datos de un colegio, la entidad “alumnos” estará relacionada con la entidad “profesores” por que un profesor impartirá clases a un alumno (o a varios) y de la misma forma la entidad de “cursos” estará relacionada con la entidad “profesores” para indicarnos que profesores imparten un curso, y con la entidad “alumnos” para indicarnos que alumnos están en dicho curso.

En resumen, todo diseño de una Base de Datos tendrá varias entidades, y además toda entidad estará relacionada con al menos otra entidad, es decir, si tenemos una entidad que no se relaciona con ninguna otra hay algo que no es correcto en el diseño.

Si se desea profundizar en el Modelo E/R se recomienda que se busque bibliografía a cerca de dicho modelo por que este tema se sale de los contenidos previstos en este curso.

5.- Paso a tablas. Una vez realizado el diseño de E/R se procederá al paso a tablas, es decir, a

indicar que tablas y atributos tendremos que implementar en el Sistema Gestor de Bases de Datos. Al tratarse de un tema que se sale de los contenidos de este curso se verá sin profundizar.

Podremos tener relaciones entre entidades de varios tipos: Unarias: una entidad se relaciona consigo misma.

Ilustración 4. Relación Unaria

Binarias: dos entidades que se relacionan entre sí.

Ilustración 5. Relación Binaria

Ternarias: tres relaciones relacionadas entre sí.

Ilustración 6. Relación Ternaria

Para indicar que dos entidades se relacionan entre sí (o una consigo misma) las uniremos con una línea que contendrá un rombo partido en su punto medio, tal como

Page 8: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 8 de 43

aparece en la Ilustración 5, o un triángulo si se trata de una relación ternaria tal y como aparece en la Ilustración 6.

Al salirse de los objetivos de este curso veremos sólo el caso más usual, que son las relaciones binarias y algunas de sus características.

A continuación veremos los 3 casos posibles de relaciones binarias y su forma de pasarlas a tablas. Para ello veremos que el equivalente a una entidad será una tabla (aunque no sea siempre así, lo veremos en las relaciones “uno a uno”) y el equivalente a un atributo será un campo.

5.1.- Relaciones Binarias 1:1 (uno a uno). En este primer caso veremos una relación R que relaciona las entidades A y B.

Cada una de ellas con sus atributos correspondientes y además pondremos también un atributo en la misma relación.

Ilustración 7. Relación Binaria 1:1

Este caso nos permite tener relaciones en las que un elemento de la entidad A se va a relacionar con uno solo de B, y al revés. Más adelante veremos un ejemplo para aclarar mejor esta idea.

En principio podríamos pensar que tendríamos dos tablas, pero éste es el único caso en el que obtenemos menos tablas que entidades. Veamos la tabla que nos aparece:

A = a0 + a1 + b0 + b1 + r

Clave Principal: a0

Clave Alternativa: b0

Como podemos ver obtenemos una tabla solamente que tiene todos los atributos de las dos entidades y además el de la relación.

Además hay que observar que tenemos una clave principal (la de la entidad A) y otra alternativa (la de la entidad B), que podríamos haber escogido al revés.

Veamos ahora un ejemplo para aclarar esta idea: Tenemos una Base de Datos que nos guardará “Equipos de Fútbol” y sus

correspondientes “Entrenadores”. Como podemos observar un equipo de fútbol sólo podrá tener un entrenador, y a su vez, un entrenador sólo podrá entrenar a un equipo. Además, y para este ejemplo, pondremos un atributo en la relación “Entrenan” para indicarnos la fecha el la cual el entrenador comenzó a entrenar el equipo.

Page 9: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 9 de 43

Ilustración 8. Ejemplo de Relación Binaria 1:1

La tabla resultante sería la siguiente: ENTRENAN = DNI + Nombre + Apellidos + NombreEquipo + Estadio +

FechaInicio

Clave Principal: DNI

Clave Alternativa: NombreEquipo

Podemos observar varias cosas: Como hemos unido las dos entidades, hemos tenido que cambiar el nombre al

atributo “Nombre” de la entidad Equipos para que no fuese el mismo que el de la entidad “Entrenadores”.

Nos aparece, como ya se vio, una clave principal y otra alternativa.

5.2.- Relaciones Binarias 1:N (uno a muchos). En este caso vamos a ver el paso a tablas cuando una entidad A puede

relacionarse con varios elementos de la entidad B, pero un elemento de la entidad B sólo puede relacionarse con uno de la entidad A. La parte del “muchos aparecerá sombreada en el rombo.

Ilustración 9. Relación Binaria 1:N

Veamos las tablas que nos aparecen: A = a0 + a1

Clave Principal: a0

B = b0 + b1 + a0 + r

Clave Principal: b0

Podemos ver que la parte del “muchos”, en este caso la entidad B, coge tanto la clave de la entidad A como el atributo de la relación R. De esta forma podemos saber cada elemento de B con cual está relacionado en A.

Veamos ahora un ejemplo para aclarar esta idea: Tenemos una Base de Datos que nos guardará “Equipos de Fútbol” y sus

correspondientes “Jugadores”. Como podemos observar un equipo de fútbol podrá tener varios jugadores, pero un jugador sólo podrá jugar en un equipo. Además, y para este ejemplo, pondremos un atributo en la relación “Juegan” para indicarnos la fecha el la cual el jugador comenzó a jugar el equipo.

Page 10: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 10 de 43

Ilustración 10. Ejemplo de Relación Binaria 1:N

Las tablas resultantes serían las siguientes: JUGADORES = DNI + Nombre + Apellidos + NombreEquipo + FechaInicio

Clave Principal: DNI

EQUIPOS = NombreEquipo + Estadio Clave Principal: NombreEquipo

Podemos observar varias cosas: Hemos tenido que cambiar el nombre al atributo “Nombre” de la entidad

Equipos para que no fuese el mismo que el de la entidad “Jugadores”. En la tabla “Equipos” aunque no hacía falta también le hemos cambiado el nombre para mayor claridad.

La clave de la entidad con el “uno” (la parte en blanco en el rombo) pasa a la otra entidad, de esta forma para cualquier jugador miraremos el atributo “NombreEquipo” y sabremos tanto el equipo al que pertenece como cualquier otro dato de ese equipo: mirando con esa clave en la entidad “Equipos” obtendremos el resto de atributos para ese “Equipo”.

La “FechaInicio” también pasaría a la entidad que tiene el “Muchos” (rombo relleno) junto a ella.

5.3.- Relaciones Binarias N:N (muchos a muchos), Por último vamos a ver el paso a tablas de dos entidades para las cuales un

elemento de una de ellas puede relacionarse con varios de la otra y viceversa.

Ilustración 11. Relación Binaria N:N

Veamos las tablas que nos aparecen: A = a0 + a1

Clave Principal: a0

B = b0 + b1

Clave Principal: b0 R = a0 + b0 + r Clave Principal: a0 + b0

Podemos ver que para cada entidad aparece una tabla, pero además aparece otra tabla nueva que contendrá la relación entre ambas entidades junto con el atributo (o

Page 11: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 11 de 43

atributos) que tenga la relación, y como clave principal tendrá las claves principales de las dos entidades que forman parte de la relación.

Veamos ahora un ejemplo para aclarar esta idea: Tenemos una Base de Datos que nos guardará “Equipos de Fútbol” y sus

correspondientes “Jugadores”. Como podemos observar un equipo de fútbol podrá tener varios jugadores, y además un jugador podrá haber jugado en más de un equipo. Además, y para este ejemplo, pondremos un atributo en la relación “Juegan” para indicarnos la temporada en la cual el jugador perteneció al equipo.

Ilustración 12. Ejemplo de Relación Binaria N:N

Las tablas resultantes serían las siguientes: JUGADORES = DNI + Nombre + Apellidos

Clave Principal: DNI EQUIPOS = NombreEquipo + Estadio

Clave Principal: NombreEquipo

JUEGAN = DNI + NombreEquipo + Temporada

Clave Pincipal: DNI + NombreEquipo

Podemos observar varias cosas: Para cada una de las dos entidades tenemos una tabla que contiene sólo los

atributos de dicha entidad. Para la tabla correspondiente a la relación tendremos una clave principal doble

que estará formada por las claves principales de las entidades que forman parte de la relación. Obsérvese que un jugador podrá aparecer varias veces en la tabla “Juegan” pero nunca podrá aparecer más de una vez relacionado con un mismo equipo, pues los pares “Jugador,Equipo” no pueden repetirse por ser la clave principal de la tabla. (Este ejemplo no sería muy correcto por que un jugador podría haber estado en un equipo en varias temporadas, y para ese caso deberíamos incluir el atributo “Temporada” en la clave para permitir esos casos).

Además la tabla “Juegan” tendrá los atributos que estaban en la relación (en este caso la temporada).

6.- Dominios. Por último, y una vez decidido que Sistema Gestor de Bases de Datos vamos a

usar tendremos que decidir que dominio tendrá cada atributo de las tablas, es decir, que tipo de datos almacenará. Para ello nos basaremos en MySQL y en el ejemplo que vamos a usar en este curso.

Como podrá observarse el ejemplo será muy sencillo, pues el curso se centra en los accesos a la Base de Datos desde páginas Web.

6.1.- Diseño del ejemplo usado en el curso. El ejemplo en el que basaremos el curso va a ser el siguiente: tenemos un centro

Page 12: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 12 de 43

que imparte cursos por profesores (para hacerlo de forma sencilla no se tendrán en cuenta los alumnos, pero para ello sólo haría falta incluir una nueva entidad que relacione los “cursos” con los “alumnos”). Un profesor podrá impartir varios cursos, pero un curso solo podrá ser impartido por un profesor, por lo que tendremos una relación “uno a muchos”.

El diseño sería el siguiente:

Ilustración 13. Diseño del ejercicio de ejemplo.

6.2.- Paso a tablas del ejemplo. Una vez realizado el diseño, el siguiente paso será el paso a tablas, cuyo resultado

será el siguiente: CURSOS = CodCurso + Nombre + CodProfesor Clave Principal: CodCurso

PROFESORES = CodProfesor + DNI + Nombre + Apellidos

Clave Principal: CodProfesor

Clave Alternativa: DNI

6.3.- Asignación de dominios. El primer paso para decidir los dominios será asignar a cada campo de la tabla un

dominio genérico. Para ello vamos a considerar los siguientes dominios: Enteros: campos que no necesitaremos decimales. Además este campo podrá

ser autonumérico, es decir, según vayamos dando de alta registros en la tabla se le asignará un número entero consecutivo, que nos evitará que lo tengamos que hacer nosotros y por lo tanto que tengamos que saber cual es el siguiente número a asinar.

Reales: campos para los que necesitemos tener decimales. Alfanuméricos: campos en los cuales almacenaremos letras, números,

caracteres especiales (como los siguientes: $ % _ : ; * + etc.). Para este tipo de campo deberemos decidir su longitud, o si será de longitud “infinita” (usado para campos como “descripciones”, “notas”, “observaciones”, etc.

Fecha/hora: campos que contendrán una fecha, una hora, o ambas a la vez. Lógicos o booleanos: contendrán valores como “si” o “no”, “verdad” o “falso”,

“activado” o “desactivado”, etc. Otros: como pueden ser campos que contengan imágenes, contenido en binario,

etc. En el ejemplo anterior tendríamos los siguientes dominios: CURSOS = CodCurso........ Alfanumérico(5)

+ Nombre ....... Alfanumérico(30)

+ CodProfesor... Entero

PROFESORES = CodProfesor .... Entero(Autonumérico)

Page 13: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 13 de 43

+ DNI .......... Alfanumérico(9)

+ Nombre ....... Alfanumérico(20)

+ Apellidos..... Alfanumérico(30)

Veamos algunas observaciones sobre lo anterior: El código de curso se ha decidido que sea alfanumérico pues contendrá una

abreviación del nombre del curso. El “CodProfesor” en la tabla de “Profesores” es autonumérico, de forma que

cada vez que demos de alta un profesor se le asignará un número correlativo y de forma automática, e esta forma no tendremos que escribirlo nosotros ni deberemos saber cual es el siguiente código a asignar cuando vayamos a dar de alta otro profesor.

El “CodProfesor” de la tabla “Cursos” debe ser del mismo tipo que el de la tabla “Profesores” para que podamos “relacionar” ambas tablas. Recordemos que ambas tablas estaban unidas a través de este atributo. Así cuando veamos que un curso es impartido por el “CodProfesor” 23 podremos ir a la tabla de “Profesores” y buscar el que tenga ese “CodProfesor” para obtener el resto de datos de este profesor.

El DNI se ha decidido que sea alfanumérico para poder almacenar los 8 números y la letra del NIF. Y recordemos que no permitirá duplicados por ser clave alternativa.

En segundo lugar, después de decidir que Sistema Gestor de Bases de Datos vamos a usar (en nuestro caso MySQL), deberemos de ver los tipos de datos o dominios de que disponemos en éste y elegir los más adecuados para nuestros campos.

Así tendremos: CURSOS = CodCurso........ Alfanumérico(5) ..... VARCHAR(5)

+ Nombre ....... Alfanumérico(30) .... VARCHAR(30)

+ CodProfesor... Entero .............. INT

PROFESORES = CodProfesor .... Entero(Autonumérico) INT(AutoInc.) + DNI .......... Alfanumérico(9) ..... VARCHAR(9)UNIC.

+ Nombre ....... Alfanumérico(20) .... VARCHAR(20)

+ Apellidos..... Alfanumérico(30) .... VARCHAR(30)

Y veamos algunos comentarios sobre estas decisiones: Para los campos alfanuméricos escogeremos el tipo VARCHAR, pues aunque

le digamos que va a tener una longitud de 20 caracteres, internamente no ocupa esos 20 caracteres sino sólo los que realmente contengan algo. Es decir, si un profesor se llama “Juan” sólo usará 4 bytes, y no 20 como cabría esperar (o como haría si usamos el tipo CHAR).

Para el “CodProfesor” de la tabla “Profesores” deberemos de marcar la casilla “AUTO_INCREMENT”.

El resto de tipos de campos serán comentados en el Capítulo 4. más detalladamente.

Page 14: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 14 de 43

Capítulo 3. El lenguaje SQL.

1.- Introducción. SQL (Structured Query Language) es un lenguaje de programación para acceder y

manipular bases de datos. SQL surgió de un proyecto de IBM en el que investigaba el acceso a bases de

datos relacionales. Esto poco a poco se ha ido convirtiendo en un estándar de lenguaje de bases de datos y gran parte de ellas lo soportan. Por esta razón, se considera a SQL como un lenguaje normalizado, que nos permite interactuar con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...)

Básicamente SQL está formado por dos tipos de comandos: DDL que permiten crear y definir nuevas bases de datos, campos e índices. DML que permiten generar consultas para ordenar, filtrar, insertar, modificar y

extraer datos de la base de datos. En este capítulo se usarán solamente los comandos DML, dejándose los comandos

DDL para el capítulo correspondiente a MySQL, desde el cual se crearán las tablas y sus campos de forma visual desde su página gestora. También podremos realizar las operaciones correspondientes a los comandos DML desde la página de MySQL, pero su utilidad principal será desde las páginas PHP que creemos.

2.- Sintaxis básica de las órdenes SQL. Para los comandos SQL usaremos la siguiente nomenclatura: Las palabra clave del lenguaje SQL se pondrán en mayúsculas (aunque los

gestores de Bases de Datos funcionan indistintamente en mayúsculas, minúsculas o aunque mezclemos ambas en una palabra). Ejemplos de estas palabras son: SELECY, FROM, INSERT, ORDER, etc.

Entre corchetes cuadrados indicaremos las partes de un comando opcional. Si además aparecen varias opciones separadas por la barra “|” esto nos indica que podremos usar una u otra, pero no las dos.

Entre las llaves “{“ y “}” indicaremos las partes del comando que pueden aparecer varias veces.

Entre los símbolos “<“ y “>” indicaremos qué deberemos de poner en ese lugar y que lo sustituiremos por el texto correspondiente, por ejemplo, por el nombre de una tabla o de un campo (sin poner esos símbolos).

Se recomienda el uso del “sangrado” para indicar que una parte de un comando está incluida en la parte del comando que aparece en la línea anterior (un comando podrá necesitar más de una línea, por eso se recomienda el uso del “sangrado”).

Recordamos al alumno que el objetivo de este curso no es conocer perfectamente SQL, por lo que se verán las instrucciones más importantes y sin entrar en detalle en ellas.

3.- Contenido de la Base de Datos. Para los siguientes ejemplos vamos a suponer que las tablas del ejemplo “cursos-

profesores” contienen los siguientes datos:

Page 15: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 15 de 43

PROFESORES:

CodProfesor DNI Nombre Apellidos 1 15754658L Carlos García López

2 14587465M Pedro Rodríguez Abad 3 28456474B Carlos Martínez Díaz 4 36574834A Manuel Arroyo Gil

CURSOS:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 1 PHP02 PHP. Acceso a Bases de Datos 1 OFI01 Ofimática: Word y Excel. 2

OFI02 Ofimática: Writer y Calc. 2 OFI03 Ofimática Avanzada: Word, Escel. 2

Notese que para cada ejercicio siempre vamos a partir de estas tablas, aunque en un ejercicio anterior se haya modificado alguna de ellas.

4.- Ejemplos de “SELECT” Esta instrucción nos permite “seleccionar” información de la Base de Datos. Su

sintaxis general es la siguiente: SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}]

FROM <nombre_tabla> [{,<nombre_tabla>}]

[WHERE <condicion> [{ AND|OR <condicion>}]] [GROUP BY <nombre_campo> [{,<nombre_campo>}]]

[HAVING <condicion>[{ AND|OR <condicion>}]]

[ORDER BY <nombre_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

Aunque no veremos todas sus posibilidades, vamos a ir poco a poco viendo sus posibles usos basándonos en las tablas del ejemplo “cursos-profesores”. Obtener todos los datos de todos los profesores.

SELECT *

FROM Profesores;

El resultado será: CodProfesor DNI Nombre Apellidos

1 15754658L Carlos García López 2 14587465M Pedro Rodríguez Abad

3 28456474B Carlos Arroyo Díaz

4 36574834A Manuel Martínez Gil

Como podemos ver nos muestra tanto todos los campos de la tabla “Profesores” (esto viene indicado por el asterísco) como todos los profesores.

Además, y como se puede ver, es recomendable terminar la instrucción con un punto y coma. Obtener el nombre y apellidos de todos los profesores.

En este caso como sólo queremos ver el nombre y los apellidos sustituimos el asterísco por esa información:

Page 16: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 16 de 43

SELECT Nombre, Apellidos

FROM Profesores;

Observemos que la lista de campos que queremos obtener está separada por una coma. Y la solución será:

Nombre Apellidos

Carlos García López Pedro Rodríguez Abad

Carlos Arroyo Díaz

Manuel Martínez Gil

Obtener el nombre y apellidos de los profesores con código mayor que 2. SELECT Nombre, Apellidos

FROM Profesores WHERE CodProfesor > 2;

Y el resultado será: Nombre Apellidos

Carlos Arroyo Díaz

Manuel Martínez Gil

Obtener todos los datos de todos los profesores ordenados por nombre. En los ejemplos anteriores vemos que el listado normalmente saldrá en el orden

en que se dieron de alta los profesores. Para que nos salgan los datos ordenados usaremos ORDER:

SELECT *

FROM Profesores

ORDER BY Nombre;

Y el resultado será: CodProfesor DNI Nombre Apellidos

1 15754658L Carlos García López 3 28456474B Carlos Arroyo Díaz

4 36574834A Manuel Martínez Gil

2 14587465M Pedro Rodríguez Abad

Como puede observarse salen ordenados por nombre, pero en el caso de que haya dos profesores con el mismo nombre posiblemente aparezcan en el orden en que se dieron de alta, esto dependerá del Sistema Gestor de Bases de Datos Obtener todos los datos de todos los profesores ordenados por nombre y

apellidos. SELECT *

FROM Profesores

ORDER BY Nombre, Apellidos;

Y el resultado será: CodProfesor DNI Nombre Apellidos

3 28456474B Carlos Arroyo Díaz 1 15754658L Carlos García López

4 36574834A Manuel Martínez Gil

2 14587465M Pedro Rodríguez Abad

Obtener los cursos impartidos por el profesor “Carlos”.

Page 17: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 17 de 43

En este ejemplo vamos a ver como obtener datos de dos tablas a través de la relación que existe entre ellas con el campo “CodProfesor”.

SELECT Profesores.Nombre, Cursos.CodCurso, Cursos.Nombre

FROM Profesores, Cursos

WHERE Profesores.Nombre = ‘Carlos’ AND Profesores.CodProfesor = Cursos.CodProfesor;

Y el resultado será: Nombre CodCurso Nombre

Carlos PHP01 Introducción al PHP

Carlos PHP02 PHP. Acceso a Bases de Datos

En la instrucción podemos observar varias cosas: Cuando tenemos varias tablas y en ellas hay campos con el mismo nombre (en

este caso el campo “Nombre”) debemos poner delante el nombre de la tabla seguido de un punto para hacer referencia a dicho campo: “Profesores.Nombre”, “Profesores.CodProfesor”, etc.

Cuando usamos el signo igual para compararlo con un número no hacía falta poner las comillas, pero en el caso de querer compararlo con un texto (en este caso con el nombre “Carlos”) debemos ponerlo entre comillas.

Si necesitamos que se cumplan varias condiciones en el WHERE usaremos AND si estas condiciones se han de complir simultáneamente, y usaremos OR si es sufuciente con que se cumpla sólo alguna de ellas.

Para expresar la relación entre dos tablas usaremos la igualdad entre los campos que hacen referencia a dicha relación entre las dos tablas (o más si fuera necesario): “Profesores.CodProfesor = Cursos.CodProfesor”.

5.- Ejemplos de “INSERT” Esta instrucción nos permite “insertar” información de la Base de Datos. Su

sintaxis general es la siguiente: INSERT INTO <nombre_tabla>

[(<campo1>[,<campo2>,...])]

VALUES (<valor1>,<valor2>,...);

Las inserciones sólo se pueden hacer de una en una, es decir, si deseamos insertar 3 nuevos registros deberemos hacer 3 veces esta instrucción: una para cada nuevo registro.

A continuación veremos unos ejemplos de esta instrucción. Insertar un curso nuevo al profesor “Manuel”.

INSERT INTO Cursos

VALUES (‘PRG01’, ‘Programación en C’, 4);

Esta instrucción nos insertará un registro nuevo, y la tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 1

PHP02 PHP. Acceso a Bases de Datos 1 OFI01 Ofimática: Word y Excel. 2 OFI02 Ofimática: Writer y Calc. 2

Page 18: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 18 de 43

OFI03 Ofimática Avanzada: Word, Escel. 2 PRG01 Programación en C 4

En el ejemplo vemos que en caso de no indicar los campos que vamos a rellenar, se toma por defecto que vamos a darle valor a todos los campos en el orden en los que aparecen definidos. Si no queremos dar valor a todos los campos deberemos indicar a cuales vamos a darselo (ver siguiente ejemplo). Crear un nuevo curso, sin asignarle profesor.

INSERT INTO Cursos CodCurso, Nombre

VALUES (‘PRG01’, ‘Programación en C’);

Esta instrucción nos insertará un registro nuevo, y la tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 1

PHP02 PHP. Acceso a Bases de Datos 1 OFI01 Ofimática: Word y Excel. 2 OFI02 Ofimática: Writer y Calc. 2 OFI03 Ofimática Avanzada: Word, Escel. 2 PRG01 Programación en C

Podemos observar que no le hemos asignado profesor (CodProfesor) al curso, por lo que éste aparecerá con valor nulo. Entonces pueden pasar varias cosas:

Si el campo no acepta nulos (esto se indica cuando definimos los campos): la instrucción dará error.

Que se guarde el registro y que a los campos que no se les ha indicado nada re pongan a “nulo”.

Que se guarde el registro y que a los campos que no se les ha indicado nada tomen un valor por defecto (que se indicó al definirlos), o un valor “automático” (cuando se definió de tipo autoincremental).

Crear un nuevo profesor. INSERT INTO Profesores DNI, Nombre, Apellidos VALUES (‘27345463E’, ‘Luis’, ‘Olmos Pérez’);

Esta instrucción nos insertará un registro nuevo, y la tabla “Profesores” quedará como:

CodProfesor DNI Nombre Apellidos 1 15754658L Carlos García López 2 14587465M Pedro Rodríguez Abad 3 28456474B Carlos Martínez Díaz

4 36574834A Manuel Arroyo Gil 5 27345463E’ Luis’ Olmos Pérez’

Y podemos observar que el campo CodProfesor, de tipo autoincremental, toma el siguiente valor.

6.- Ejemplos de “UPDATE” Esta instrucción nos permite “actualizar” información de la Base de Datos. Su

Page 19: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 19 de 43

sintaxis general es la siguiente: UPDATE <nombre_tabla>

SET <campo1> = <valor1>

{[,<campo2> = <valor2>,...,<campoN> = <valorN>]}

[WHERE <condicion>];

Las actualizaciones pueden afectar a uno, varios o a todos los registros de una tabla de la Base de Datos. Con esta instrucción (igual que con la de borrado) debemos tener cuidado por que es muy importante usar la opción “WHERE” (aunque sea opcional) pues si no la ponemos nos actualizará todos los registros de la tabla. Asignarle el curso PHP01 al profesor Manuel.

UPDATE Cursos

SET CodProfesor = 4

WHERE CodCurso = ‘PHP01’;

La tabla “Cursos” quedará:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 4 PHP02 PHP. Acceso a Bases de Datos 1 OFI01 Ofimática: Word y Excel. 2

OFI02 Ofimática: Writer y Calc. 2 OFI03 Ofimática Avanzada: Word, Escel. 2

Asignar al profesor Manuel los cursos que tiene el profesor Pedro. Normalmente en la condición se usará con el campo clave de la tabla para así

conseguir que sólo afecte el cambio a un registro (como en el ejemplo anterior), pero podemos usar cualquier campo y condición (como en este ejemplo).

UPDATE Cursos SET CodProfesor = 4

WHERE CodProfesor = 2;

La tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 1 PHP02 PHP. Acceso a Bases de Datos 1

OFI01 Ofimática: Word y Excel. 4 OFI02 Ofimática: Writer y Calc. 4 OFI03 Ofimática Avanzada: Word, Escel. 4

Vemos que se han realizado cambios en 3 registros.

7.- Ejemplos de “DELETE” Esta instrucción nos permite “borrar” información de la Base de Datos. Su

sintaxis general es la siguiente: DELETE FROM <nombre_tabla>

[WHERE <condicion>];

El borrado puede afectar a uno, varios o a todos los registros de la Base de Datos. Hemos de tener en cuenta que aunque borremos todos los registros, la tabla seguirá existiendo, aunque sin datos. Para borrar la tabla o su estructura existen otras órdenes

Page 20: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 20 de 43

que no usaremos por que en caso de necesitarlo podremos hacerlo desde pmpMyAdmin de forma más sencilla (igual que cuando hemos creado la tabla).

Esta instrucción es muy sencilla, pero debermos tener en cuenta una cosa: no debemos de borrar un profesor si éste tiene cursos asignados. Esto aveces es imposible: cuando al definir la tabla “Cursos” le hemos indicado que “CodProfesor” es referencia a otra tabla (“Profesores”) y que no puede tener valores nulos. Borrar el curso OFI03.

DELETE FROM Cursos

WHERE CodCurso = ‘OFI03’;

La tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 1

PHP02 PHP. Acceso a Bases de Datos 1 OFI01 Ofimática: Word y Excel. 4 OFI02 Ofimática: Writer y Calc. 4

Borrar los cursos del profesor Pedro. DELETE FROM Cursos

WHERE CodProfesor = 2;

La tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor PHP01 Introducción al PHP 1 PHP02 PHP. Acceso a Bases de Datos 1

Page 21: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 21 de 43

Capítulo 4. phpMyAdmin: MySQL.

1.- Introducción. Para realizar las pruebas en nuestro ordenador necesitaremos instalar un programa

que traduzca las peticiones PHP a código HTML para ser enviado al ordenador que ha solicitado la página. Para más información puede consultarse la primera parte de este curso: “Curso de PHP”.

Además necesitaremos un Sistema gestor de Bases de Datos, que en este caso será MySQL, y usaremos PhpMyAdmin para acceder a las tablas, etc.

2.- Instalación. A continuación explicaremos como instalar dicho programa tanto en Windows

como en Linux.

2.1.- Instalación en Windows Para realizar este curso se ha usado “WampServer 2.0i”, que se puede bajar de su

página "http://www.wampserver.com/en/download.php" que incluye: Apache 2.2.11 PHP 5.3.0 MySQL 5.1.36 Phpmyadmin Nos bajaremos el programa y una vez instalado (cuidado, no hacerlo si se tiene

instalada la versión Wamp5, para ello seguir las instrucciones de la página que se indicó anteriormente) deberemos ponerlo en funcionamiento para que atienda las solicitudes. Para ello simplemente accederemos al acceso directo que se nos ha creado o lo buscaremos en el menú "Inicio/Todos los Programas". (No se ha hecho ningún comentario sobre su instalación por su sencillez).

A partir de ese momento nos aparecerá el símbolo a la derecha de la barra de estado, y si situamos en cursor del ratón sobre él nos debe indicar: "All services running" (todos los servicios ejecutándose).

Si pulsamos con el botón derecho del ratón sobre dicho símbolo nos permitirá terminar el programa, es decir, parar completamente el servidor.

Y si pulsamos con el botón izquierdo nos permitirá, entre otras cosas: Iniciar, parar o reiniciar todos los servicios. Iniciar, parar o reiniciar el servidor Apache. Iniciar, parar o reiniciar el servidor MySQL. Editar los ficheros de configuración. Ir directamente al directorio donde tenemos nuestra página Web.

2.2.- Instalación en Linux. Distribución Debian. En el caso de estar creando el servidor en un ordenador con Linux el

procedimiento sería muy parecido. Desde la consola del sistema y siendo el usuario “root” ejecutaremos los siguientes comandos:

#apt-get install apache2 #apt-get install PHP5

Page 22: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 22 de 43

Si todo ha ido bien los dos servicios deberán estar en funcionamiento y no necesitaremos ejecutarlos pues Linux lo hará al encender el sistema. (Previamente se recomienda haber hecho "apt-get update")

De todas formas, en caso de necesitar reiniciar el servicio ejecutaremos la orden: #/etc/init.d/apache2 restart

en caso de querer pararlo: #/etc/init.d/apache2 stop

y en caso de querer volverlo a poner en funcionamiento: #/etc/init.d/apache2 start

Deberemos de hacer lo mismo con el servicio “PHP”.

2.3.- Fichero de configuración “httpd.conf”. Para configurar el servidor Web deberemos editar el fichero "httpd.conf" y

realizar la siguiente modificación: Debemos indicarle en que directorio se encuentra nuestra página Web, es decir, la

página raíz del servidor. Este directorio se encuentra definido en la directiva "DocumentRoot", y deberemos sustituirla por nuestro directorio, por ejemplo:

DocumentRoot "C:/paginas/mipagina.com"

Deberemos tener en cuenta lo siguiente: Las barras son las que se usan en Linux, y no las usadas en Windows. Después de cualquier modificación de cualquier fichero de configuración

deberemos de reiniciar el servicio o servicios afectados.

2.4.- Comprobar que todo ha funcionado bien. Para comprobar que todo ha ido bien deberemos de abrir un explorador de páginas

Web y escribir en su barra de direcciones: http://localhost/

Entonces nos aparecerá una página como la que se muestra en la Ilustración 14.

Page 23: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 23 de 43

Ilustración 14. Ejemplo de ejecución inicial de PHP en http://localhost En caso de que hayamos modificado la directiva "DocumentRoot" del fichero

"httpd.conf" nos aparecerá la página principal de nuestra página Web. Recordemos que la página principal por defecto viene indicada por la directiva "DirectoryIndex", como se muestra a continuación:

DirectoryIndex index.php index.html index.htm

En este caso, si no se le indica que página queremos que abra, el navegador buscará los ficheros que se le han indicado en "DirectoryIndex" en ese mismo orden, dando error en caso de no encontrar ninguno de ellos. Como puede observarse, la primera página es "index.php". Si no aparece deberemos incluirla.

3.- phpMyAdmin. 3.1.- Definición de la Base de Datos y de las Tablas.

Basándonos en el ejemplo que se desarrolló en el apartado 6.1.- vamos a pasar a diseñar las tablas con phpMyAdmin. Para ello escribiremos “localhost” en la barra de direcciones del navegador y después seleccionaremos la opción “phpmyadmin” dentro del apartado “Your Aliases” (en la parte inferior de la pantalla), o bien escribiremos “http://localhost/phpmyadmin/” en la barra de direcciones del navegador Web.

Entonces tendremos una pantalla como la que aparece a continuación:

Page 24: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 24 de 43

Ilustración 15. Pantalla inicial de phpMyAdmin Podemos observar en la parte izquierda que en la lista desplegable de “Bases de

Datos” tenemos ya dos Bases de Datos: “information_schema (17)” y “mysql (17)”, y como podemos ver en la siguiente ilustración, la Base de Datos “mysql” tiene 17 tablas (como aparece indicado entre paréntesis):

Ilustración 16. Contenido de la Base de Datos "mysql". Una vez situados en este entorno vamos a comenzar a definir las tablas que

necesitamos, para ello podemos ir a la página de inicio (pulsando sobre el dibujo con una casa que aparece en la parte superior-izquierda) y después iremos a la opción “Bases de Datos” para comenzar con su diseño (ver Ilustración 17).

Page 25: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 25 de 43

Ilustración 17. Opción de diseño de la nueva Base de Datos. Una vez en la pantalla correspondiente crearemos la Base de Datos llamada

“cursophp2” (tener cuidado de escribirlo todo en minúsculas para evitar problemas posteriormente) y pulsar el botón “Crear”.

Ilustración 18. Crear la Base de Datos "cursophp2". A continuación pasaríamos a crear las dos tablas del curso: “cursos” y

“profesores”, para ello escribiríamos el nombre de la primera de ellas en el cuadro que aparece con el título “Crear nueva tabla en la base de datos cursophp2” (en este caso la tabla “cursos”), en la parte derecha el número de campos que tiene dicha tabla (en este caso 3) y pulsamos el botón “Continuar”.

Si nos equivocamos en el número de campos no hay problema, pues en cualquier momento podremos añadir o eliminar campos de la tabla, pero teniendo en cuenta que si hay datos y eliminamos un campo, los datos de dicho campo se perderán.

Ahora rellenaremos los datos de los campos que nos interesan (más adelante se comentan con más detalle todos):

Campo: Nombre del campo. Para el ejemplo pondremos los nombres: “codcurso”, “nombre” y “comprofesor”.

Tipo: El tipo de cada campo. Para el ejemplo serán: “VARCHAR”, “VARCHAR” y “INT”.

Longitud: hace falta indicar la longitud de los campos alfanuméricos, en este caso pondremos longitud 5 al campo “codcurso” y longitud 30 al campo “nombre”.

Nulo: Dejaremos el valor por defecto “not null”. Predeterminado: Aquí podemos indicar que valor por defecto queremos que

Page 26: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 26 de 43

tenga un campo, por ejemplo, si tenemos un campo “país” y la mayoría de veces vamos a tener “España” lo indicamos aquí y así no sería necesario insertar dicho valor pues si no se le indica nada pondría ese valor, es decir, cuando hagamos un “INSERT” (sentencia de SQL) si no ponemos nada en ese campo, tomará este valor.

Extra: si queremos que un valor numérico se ponga de forma automática y de forma creciente (como por ejemplo el campo “codprofesor”) aquí se lo indicaremos con “auto_increment” y así para cada profesor que demos de alta nos pondrá un valor numérico consecutivo.

Clave Primaria: En este caso marcaremos esta opción en el campo “codcurso” para indicar que es la clave primaria (recordemos que no permitirá registros con un mismo valor en este campo).

Índice: Si queremos crear un índice en algún campo lo indicaremos aquí. Normalmente se usa para búsquedas u ordenaciones con este campo y así el acceso es más rápido.

Único: Aquí se indica si un campo es clave alternativa (recordemos que no podrán haber registros que tengan el mismo valor en este campo).

Ninguna de las tres anteriores: Dejaremos marcada esta opción cuando el campo no sea ni clave primaria, ni índice, ni único.

Comentarios: Este campo se usa para poner una pequeña descripción de la información que va a contener, de esta forma si otra persona accede a la Base de Datos para realizar alguna modificación (o nosotros mismos al cabo de un tiempo) saber que contiene el campo.

También podremos añadir un comentario a la tabla en la parte inferior de la misma pantalla, grabar la tabla o añadir más campos (como se dijo anteriormente).

De esta forma, y tras grabar las tablas, éstas quedarían de la siguiente forma (sólo se muestran los datos de los campos que se han considerado más importantes):

Ilustración 19. Definición de la tabla "Cursos".

Page 27: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 27 de 43

Ilustración 20. Definición de la tabla "Profesores". Y ahora podemos ver que nuestra Base de Datos “cursophp2” tiene dos tablas:

Ilustración 21. Tablas de la Base de Datos "cursophp2". En esta última pantalla podemos ver que hay una lista desplegable con el texto

“Para los elementos que están marcados:”. Es aquí dónde (después de seleccionar una o varias de las tablas) podremos:

Vaciar: eliminará los datos que contiene la tabla, pero no su definición. Eliminar: eliminará tanto los datos que haya en la tabla como su definición. Entre las acciones que podemos realizar a una tabla tenemos las siguientes:

Examinar: nos muestra un listado con los registros que tiene.

Estructura: vemos la estructura de la tabla (ver la Ilustración 22 y la Ilustración 23).

Buscar: nos permite realizar búsquedas en la tabla.

Insertar: nos permite insertar registros a la tabla.

Vaciar: borra todos los registros de la tabla, pero no su definición.

Eliminar: borra la definición de la tabla. A continuación mostraremos unas imágenes con las estructuras de ambas tablas:

Page 28: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 28 de 43

Ilustración 22. Estructura de la tabla "Cursos".

Ilustración 23. Estructura de la tabla "Profesores". También podemos ver el “Diccionario de Datos” (desde la pantalla de la Base de

Datos “cursophp2”) y entonces veríamos lo siguiente:

Page 29: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 29 de 43

Ilustración 24. Diccionario de Datos.

3.2.- Tipos de datos en phpMyAdmin. Los Tipos que tiene phpMyAdmin (o el Sistema Gestor de Bases de Datos

MySQL) son los siguientes:

Page 30: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 30 de 43

Ilustración 25. Tipos de Datos. Podemos encontrarlos en la lista desplegable que aparece en la pantalla en la que

definimos los campos de una tabla, y estas son sus características:

a) Tipos de cadena: Char(n): almacena una cadena de longitud fija. La cadena podrá contener

desde 0 a 255 caracteres. VarChar(n): almacena una cadena de longitud variable. La cadena podrá

contener desde 0 a 255 caracteres. Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object) La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Mayúsculas y las minúsculas, el tipo BLOB se ordena teniéndolas en cuenta. Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.

TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres. Blob y Text: un texto con un máximo de 65535 caracteres. MediumBlob y MediumText: un texto con un máximo de 16.777.215

caracteres.

Page 31: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 31 de 43

LongBlob y LongText: un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.

Enum: campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos

Set: un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.

Tamaños de almacenamiento:

Tipo de campo Tamaño de Almacenamiento

CHAR(n) n bytes

VARCHAR(n) n +1 bytes

TINYBLOB, TINYTEXT Longitud + 1 bytes

BLOB, TEXT Longitud +2 bytes

MEDIUMBLOB, MEDIUMTEXT Longitud +3 bytes

LONGBLOB, LONGTEXT Longitud +4 bytes

ENUM('value1','value2',...) 1 ó dos bytes dependiendo del número de valores

SET('value1','value2',...) 1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores

Diferencia de almacenamiento entre los tipos Char y VarChar:

Valor CHAR(4) Almacenamiento VARCHAR(4) Almacenamiento '' '' 4 bytes " 1 byte 'ab' 'ab ' 4 bytes 'ab' 3 bytes 'abcd' 'abcd' 4 bytes 'abcd' 5 bytes 'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

b) Tipos numéricos: Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos,

los que están en coma flotante (con decimales) y los que no. TinyInt: es un número entero con o sin signo. Con signo el rango de valores

válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255 Bit ó Bool: un número entero que puede ser 0 ó 1 SmallInt: número entero con o sin signo. Con signo el rango de valores va

desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535. MediumInt: número entero con o sin signo. Con signo el rango de valores va

desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215. Integer, Int: número entero con o sin signo. Con signo el rango de valores va

desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295

BigInt: número entero con o sin signo. Con signo el rango de valores va desde

Page 32: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 32 de 43

-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.

Float: número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

xReal, Double: número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

Decimal, Dec, Numeric: Número en coma flotante desempaquetado. El número se almacena como una cadena.

Tamaños de almacenamiento:

Tipo de Campo Tamaño de Almacenamiento

TINYINT 1 byte

SMALLINT 2 bytes

MEDIUMINT 3 bytes

INT 4 bytes

INTEGER 4 bytes

BIGINT 8 bytes

FLOAT(X) 4 ú 8 bytes

FLOAT 4 bytes

DOUBLE 8 bytes

DOUBLE PRECISION 8 bytes

REAL 8 bytes

DECIMAL(M,D) M+2 bytes sí D > 0, M+1 bytes sí D = 0

NUMERIC(M,D) M+2 bytes if D > 0, M+1 bytes if D = 0

c) Tipos de fecha: A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba

de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31.

Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia

DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

Tamaño Formato

Page 33: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 33 de 43

14 AñoMesDiaHoraMinutoSegundo aaaammddhhmmss

12 AñoMesDiaHoraMinutoSegundo aammddhhmmss

8 AñoMesDia aaaammdd

6 AñoMesDia aammdd

4 AñoMes aamm

2 Año aa

Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'

Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.

Tamaños de almacenamiento:

Tipo de Campo Tamaño de Almacenamiento

DATE 3 bytes

DATETIME 8 bytes

TIMESTAMP 4 bytes

TIME 3 bytes

YEAR 1 byte

3.3.- Privilegios. Hasta ahora hemos definido tanto la Base de Datos como sus tablas como si

fuéramos el usuario “root”, el cual tiene todos los privilegios. Además dicho usuario no tiene contraseña, lo cual es muy peligroso.

En este apartado veremos como poner contraseña al usuario “root” y cómo crear nuevos usuarios. Para ello accedemos a dicha pantalla pulsando en la opción “Privilegios” desde la pantalla inicial. Ver Ilustración 26.

Ilustración 26. Acceso a la pantalla de "Privilegios". Desde la siguiente pantalla procederemos a pulsar en el botón que nos permite

editar los privilegios. Ver Ilustración 27.

Page 34: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 34 de 43

Ilustración 27. Editar los privilegios de "root". En la pantalla que nos aparece solamente cambiaremos la contraseña, poniendo en

este caso la nueva contraseña: root2

Ilustración 28. Cambiar la contraseña de "root". Una vez la contraseña ha sido cambiada en la página, deberemos de cambiarla

también en la configuración de phpMyAdmin. Para ello accedemos al fichero “config.inc.php” (que está situado en el directorio “C:\wampapps\phpmyadmin2.10.1”) y buscamos las siguientes líneas:

$cfg['Servers'][$i]['user'] = 'root'; // MySQL user

$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed

// with 'config' auth_type)

Poniendo en la segunda de ellas la contraseña: $cfg['Servers'][$i]['user'] = 'root'; // MySQL user $cfg['Servers'][$i]['password'] = 'root2'; // MySQL password (only needed

// with 'config' auth_type)

De esta forma el acceso al Sistema Gestor de Bases de Datos es más seguro, y luego usaremos el usuario “root” y su contraseña para acceder a los datos.

Debemos tener en cuenta que esta contraseña puede que cambie en el Sistema Gestor de Bases de Datos (MySQL) de donde tengamos alojada nuestra página web.

3.4.- Importar/Exportar

a) Exportar. Por último vamos a ver cómo exportar la Base de Datos, para después importarla

a phpMyAdmin del servidor de Internet donde vayamos a tener nuestra página. Para exportar accederemos a través de la opción “Exportar” desde la página

inicial:

Page 35: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 35 de 43

Ilustración 29. Exportar la Base de Datos. Desde la siguiente pantalla que nos aparezca deberemos de seleccionar en primer

lugar la Base de Datos que queremos exportar (en nuestro caso “cursophp2”). Si queremos seleccionar mas de una Base de Datos podemos hacerlo pulsando la tecla “Ctrl.” Y haciendo clic con el ratón sobre ellas.

En la opción de “Exportar” (situada a la izquierda) dejaremos la opción “SQL”. Las “Opciones SQL” las dejaremos tal y como están. Y por último marcaremos la casilla “Enviar (genera un archivo descargable)” dejando la opción por defecto (Compresión: ninguna).

A continuación pulsaremos el botón “Continuar” y nos aparecerá una ventana en la que podremos decir donde queremos que nos guarde el fichero SQL con los datos exportados (posiblemente en el escritorio).

El contenido de dicho fichero serán las instrucciones SQL necesarias para importar la Base de Datos. Veámoslo:

-- phpMyAdmin SQL Dump

-- version 2.10.1

-- http://www.phpmyadmin.net --

-- Servidor: localhost

-- Tiempo de generación: 21-04-2010 a las 21:01:35 -- Versión del servidor: 5.0.45

-- Versión de PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; --

-- Base de datos: `cursophp2`

--

CREATE DATABASE `cursophp2` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

USE `cursophp2`;

-- --------------------------------------------------------

-- -- Estructura de tabla para la tabla `cursos`

--

CREATE TABLE `cursos` (

Page 36: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 36 de 43

`codcurso` varchar(5) NOT NULL COMMENT 'Código del curso',

`nombre` varchar(30) NOT NULL COMMENT 'Nombre del curso',

`codprofesor` int(11) NOT NULL COMMENT 'Cód. del prof.',

PRIMARY KEY (`codcurso`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Tabla con los cursos.';

--

-- Volcar la base de datos para la tabla `cursos`

--

-- --------------------------------------------------------

--

-- Estructura de tabla para la tabla `profesores` --

CREATE TABLE `profesores` (

`codprofesor` int(11) NOT NULL auto_increment COMMENT 'Cód. del prof.',

`dni` varchar(9) NOT NULL COMMENT 'DNI del prof.', `nombre` varchar(20) NOT NULL COMMENT 'Nombre del prof.',

`apellidos` varchar(30) NOT NULL COMMENT 'Apellidos del prof.',

PRIMARY KEY (`codprofesor`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Tabla con los profesores.' AUTO_INCREMENT=1 ;

--

-- Volcar la base de datos para la tabla `profesores`

--

En caso de que hubiéramos introducido datos, estos aparecerían detrás de las líneas que tienen el siguiente texto:

--

-- Volcar la base de datos para la tabla `cursos` --

y --

-- Volcar la base de datos para la tabla `profesores`

--

b) Importar. Para importar la Base de Datos seleccionaremos dicha opción en la página inicial,

después desde la página que nos aparece seleccionamos el fichero exportado anteriormente y después pulsaríamos el botón “Continuar”.

Deberemos tener en cuenta que si la Base de Datos ya existe nos dará error al tratar de importarla. Para ello, si queremos que nos elimine la Base de Datos si ya existe, antes de importarla, deberemos de seleccionar la opción “Añada DROP DATABASE” en el apartado ”Opciones de exportación de la base de datos” cuando vayamos a realizar la exportación.

Page 37: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 37 de 43

Capítulo 5. Conexión y Desconexión a una Base de Datos.

1.- Introducción. Lo primero y principal para acceder a una Base de Datos va a ser establecer una

conexión con ella. Esto va a ser muy simple y lo único que deberemos hacer será comprobar si se ha conseguido correctamente o si ha habido algún error.

2.- Establecer la conexión. Como ya se ha indicado en el apartado anterior, lo primero será estableces una

conexión con el servidor MySQL, y para ello usaremos la instrucción “mysql_connect”, a la que deberemos de indicarle lo siguiente:

El nombre del servidor de la Base de Datos. El nombre de usuario con el que nos conectaremos. La contraseña del usuario con el que nos estamos conectando. Y nos devolverá: FALSE (es decir, un cero) si se ha producido un error en la conexión y TRUE

en caso contrario (es decir, un valor numérico que nos indicará el número de conexión para usarlo más adelante).

Veamos un ejemplo para la Base de Datos que estamos usando en el curso: $conexion=@mysql_connect("localhost","root","root2");

if(!$conexion) { echo("ERROR. No contesta el servidor.(mysql_connect)<BR>");

return;

}

echo("Conexión realizada correctamente<BR>");

mysql_close($conexion);

Como hemos podido ver, la conexión es muy simple. Y podemos observar que al final de ésta debemos cerrar la conexión con la instrucción “mysql_close”, a la que solamente le debemos indicar la conexión que queremos cerrar.

Ahora tendremos que seleccionar la Base de Datos a la que queremos acceder, pues podemos tener varias.

Para ello usaremos la instrucción “mysql_select_db”, a la que deberemos indicarle lo siguiente:

La Base de Datos a la que queremos conectarnos. La conexión que queremos usar, es decir, el valor que nos devolvió la llamada

que realizamos antes al establecer la conexión. Y nos devolverá: FALSE si ha habido algún error o TRUE si ha funcionado correctamente.

Page 38: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 38 de 43

Veamos nuevamente un ejemplo: $conexion=@mysql_connect("localhost","root","root2");

if(!$conexion) {

echo("ERROR. No contesta el servidor.(mysql_connect)<BR>"); return;

}

echo("Conexión realizada correctamente<BR>"); if (!mysql_select_db("cursophp2", $conexion)) { echo("ERROR. No contesta el servidor. (mysql_select_db)<BR>"); return; }; echo("Base de Datos seleccionada correctamente<BR>");

mysql_close($conexion);

3.- Control básico de errores. El control de errores que deberemos de realizar serán las dos instrucciones “if”

que podemos observar en el código anterior. Ambos trozos de código nos garantizan que se ha realizado correctamente la conexión y que hemos elegido una Base de Datos correcta. En caso contrario nos mostrará un mensaje de error descriptivo y terminará la ejecución del código PHP de la página con la instrucción “return”.

4.- Desconexión de la Base de Datos. Como se comentó anteriormente, una vez hayamos terminado con el acceso a los

datos deberemos desconectarnos de la Base de Datos con la instrucción “mysql_select_db”. Esta instrucción podemos no ponerla, pues al terminar de ejecutar las instrucciones del fichero PHP en el que estamos se cerrará automáticamente la conexión, pero es aconsejable hacerlo por claridad en el código.

Page 39: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 39 de 43

Capítulo 6. Acceso a la Base de Datos.

1.- Insertar nuevos datos. Para comenzar con los accesos a la Base de Datos lo haremos insertando datos en

ella, y para eso usaremos la instrucción “insert”. Su sintaxis ya se vio en el apartado “5.- Ejemplos de “INSERT””, por lo que ahora haremos un ejemplo:

Insertar el profesor “Carlos García López” con DNI “15754685L”: $conexion=@mysql_connect("localhost","root","root2");

if(!$conexion) { echo("ERROR. No contesta el servidor.(mysql_connect)<BR>");

return;

}

echo("Conexión realizada correctamente<BR>");

if (!mysql_select_db("cursophp2", $conexion)) { echo("ERROR. No contesta el servidor. (mysql_select_db)<BR>");

return;

};

echo("Base de Datos seleccionada correctamente<BR>");

$query="insert into profesores (nombre, apellidos, dni) values

('Carlos','García López','15754685L')"; $result=@mysql_query($query,$conexion); if (!$result) { echo("ERROR en el servidor.(mysql_query:insert)"); return; } else { echo("Profesor dado de alta correctamente.<BR>"); } mysql_close($conexion);

El código que hemos añadido al que teníamos ya del capítulo anterior (establecer conexión y seleccionar Base de Datos) está resaltado en negrita.

Podemos observar que se ha dado de alta el profesor si entramos en MySQL, seleccionamos la tabla “profesores” de la Base de Datos “cursophp2”, y pulsamos sobre la opción “examinar” que nos aparece en la parte superior. Entonces obtenemos la siguiente pantalla:

Page 40: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 40 de 43

Ilustración 30. Resultado después de hacer "INSERT". Después de ver la imagen destacaremos lo siguiente: En el insert no hemos incluido el código del profesor (codprofesor) porque este

campo es autonumérico, y MySQL le asigna valores consecutivamente. En este caso, al ser el primer registro le ha asignado un “1”.

2.- Obtención de Datos. Para ver los datos que tenemos usaremos la instrucción “select” con la única

diferencia que en ese caso, al estar programando en PHP y no interactuando directamente con la Base de Datos con SQL deberemos realizar primero la instrucción “select” y después usar un bucle para tratar todos los registros que nos devuelva dicha instrucción.

$conexion=@mysql_connect("localhost","root","root2");

if(!$conexion) {

echo("ERROR. No contesta el servidor.(mysql_connect)<BR>"); return;

}

echo("Conexión realizada correctamente<BR>");

if (!mysql_select_db("cursophp2", $conexion)) {

echo("ERROR. No contesta el servidor. (mysql_select_db)<BR>"); return;

};

echo("Base de Datos seleccionada correctamente<BR>");

$query="select nombre, apellidos from profesores"; $result=@mysql_query($query,$conexion); if (!$result) { echo("ERROR en el servidor.(mysql_query:select)");

Page 41: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 41 de 43

return; } $Total=mysql_num_rows($result); $Contador=0; while ($Contador < $Total) { $Nombre=mysql_result($result,$Contador,'nombre'); $Apellidos=mysql_result($result,$Contador,'apellidos'); echo("$Nombre $Apellidos<BR>"); $Contador++; }

mysql_close($conexion);

Aunque el código es muy simple comentaremos varias cosas: Primero preparamos la instrucción para el “select” en la variable “$query”

y luego la ejecutamos con la instrucción “mysql_query” que nos devolverá si se ejecutó correctamente o no.

Si todo ha ido bien pondremos en la variable “$Total” el número de filas que vamos a tener, y luego usaremos un bucle con “while” para recorrer todas esas filas y hacer con cada una de ellas lo que sea necesario (en el ejemplo simplemente las mostramos en pantalla).

3.- Modificar datos existentes. Para realizar una modificación el los daos usaremos la instrucción “update”, como

ya se vio en el capítulo correspondiente a SQL. Veamos un ejemplo en el que le cambiaremos el nombre al profesor con el DNI = “”:

$conexion=@mysql_connect("localhost","root","root2");

if(!$conexion) {

echo("ERROR. No contesta el servidor.(mysql_connect)<BR>");

return; }

echo("Conexión realizada correctamente<BR>");

if (!mysql_select_db("cursophp2", $conexion)) {

echo("ERROR. No contesta el servidor. (mysql_select_db)<BR>");

return; };

echo("Base de Datos seleccionada correctamente<BR>");

$query="update profesores set nombre = 'Juan' where dni = '15754685L'";

$result=@mysql_query($query,$conexion); if (!$result) { echo("ERROR en el servidor.(mysql_query:update)");

Page 42: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 42 de 43

return; } echo("Modificación realizada correctamente<BR>");

mysql_close($conexion);

Como puede observarse en este ejemplo, simplemente hemos usado la instrucción “update” sin necesidad de realizar un bucle. Y debemos tener en cuenta que con esta instrucción, como ya se explicó, puede modificar 0, una o más registros de la Base de Datos.

4.- Borrar datos. Y por último veremos como borrar algún registro de la Base de Datos. Para ello

usaremos la instrucción “delete”. Recordemos que esta instrucción, al igual que “update” puede afectar a varios registros.

$conexion=@mysql_connect("localhost","root","root2");

if(!$conexion) { echo("ERROR. No contesta el servidor.(mysql_connect)<BR>");

return;

}

echo("Conexión realizada correctamente<BR>");

if (!mysql_select_db("cursophp2", $conexion)) { echo("ERROR. No contesta el servidor. (mysql_select_db)<BR>");

return;

};

echo("Base de Datos seleccionada correctamente<BR>");

$query="delete from profesores where dni='15754685L'"; $result=@mysql_query($query,$conexion); if (!$result) { echo("ERROR en el servidor.(mysql_query:delete)"); return; } echo("Borrado realizado correctamente<BR>");

mysql_close($conexion);

Page 43: Curso de PHP-2. Accesos a Bases de Datos. Luis Bonilla de PHP-2. Accesos a... · las relaciones binarias y algunas de sus características. A continuación veremos los 3 casos posibles

Curso de PHP II. Acceso a Bases de Datos

Página 43 de 43

Capítulo 7. Ejercicio Final.

1.- Ejercicio: Profesores-cursos. En este capítulo vamos a proponer un ejercicio con el que se va a repasar todo lo

visto anteriormente para hacer una página que nos gestione una Base de Datos. Para ello vamos a usar la Base de Datos ejemplo.

El ejercicio consistirá en hacer una página Web simple desde la que gestionemos la Base de Datos. Desde esta página podremos acceder los datos de los cursos de la siguiente forma:

Altas: introduciremos el Código del curso, el nombre del curso y seleccionaremos el profesor de una lista desplegable.

Bajas: a partir del Código del Curso lo daremos de baja. Modificaciones: a partir del Código del Curso podremos cambiar el nombre del

curso y/o el profesor que lo imparte. Listado: obtendremos un listado de los cursos por orden alfabético de su

nombre. Y para los profesores de la siguiente forma: Altas: introduciremos el DNI, el nombre y los apellidos. Bajas: a partir del DNI lo daremos de baja. Deberemos tener en cuenta que no

podremos dar de baja un profesor que esté impartiendo algún curso (ver la tabla de cursos).

Modificaciones: a partir del DNI podremos cambiar el nombre y/o apellidos. Listado: obtendremos un listado de los profesores ordenado por nombre y

apellidos.