Documentos de Académico
Documentos de Profesional
Documentos de Cultura
$num_entradas = 5;
$tarifa = "precio_normal";
$importe = $tarifa($num_entradas);
print "El importe total de las $num_entradas entradas
es $importe euros.";
Por supuesto, el valor de la variable que hace referencia a la función podría ser
asignado a partir de determinadas condiciones en el programa, por ejemplo, si el día
actual es un miércoles se podría aplicar la tarifa reducida y en cualquier otro día la
tarifa normal:
if(date("w") == 3)
$tarifa = "precio_reducido";
else
$tarifa = "precio_normal";
$importe = $tarifa($num_entradas);
get_defined_functions()
212
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
DEFINICIÓN DE FUNCIONES
$f = get_defined_functions();
print_r($f);
mostraría en la página una lista con las más de 700 funciones predefinidas en PHP.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
213
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
array, puede accederse a ella y modificarse siempre que sea necesario, gracias a la
multitud de funciones que permiten la gestión y manipulación de arrays, aspecto
este último en el que destaca especialmente el lenguaje PHP.
215
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.1:
Una primera forma de definir un array consiste en asignar directamente sus valores,
por ejemplo, a continuación se define un array de nombre $x, con cuatro elementos
indexados numéricamente comenzando en la posición 0:
$x[0] = 1;
$x[1] = "¡¡hola!!";
$x[2] = 3;
$x[] = "Último";
Como alternativa se podría haber creado e inicializado el anterior array con ayuda
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
En este caso no se han especificado índices y se consideran por defecto los valores
0, 1, 2…
Para acceder a cada uno de los elementos del array, de nuevo se utiliza el índice,
pudiéndose utilizar esos valores en una expresión como cualquier otra variable. Por
ejemplo:
$z = $x[0] + 5*$x[2];
216
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
Ejemplo 8.2:
Supóngase que se desea almacenar los años de un conjunto de películas. Se puede
construir un array de elementos numéricos (los años) indexados mediante una
cadena de caracteres (el título de la película correspondiente).
En este caso, al construir el array debe indicarse tanto la palabra clave que actúa de
índice como el valor asociado a ese elemento del array. Aunque el array se haya
construido con la función array(), en cualquier momento se podría añadir un
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
nuevo elemento:
Para acceder a los elementos del array se utiliza de nuevo la palabra clave:
217
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.3:
A continuación se crea un array de nombre $M y de dos dimensiones:
$M[0][0] = 5;
$M[0][1] = 3;
$M[1][0] = -2;
$M[1][1] = 7;
$M=array(array(5,3),array(-2,7));
Para acceder a los elementos individuales del array se deberían utilizar los dos
índices:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
$d = $M[0][0]*$M[1][1] - $M[0][1]*$M[1][0];
Ejemplo 8.4:
$pelicula["George Cukor"][1949] = "La costilla de Adán";
$pelicula["Jean Renoir"][1937] = "La gran ilusión";
$pelicula["Roberto Rossellini"][1944] = "Roma, ciudad
abierta";
$pelicula["Billy Wilder"][1954] = "Sabrina";
$pelicula["Frank Capra"][1938] = "Vive como quieras";
218
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
Ejemplo 8.5:
También es posible indexar los elementos de un array multidimensional:
$peliculas = array(
"La costilla de Adán" =>
array("Director"=>"G. Cukor","Año"=>1949),
"La gran ilusión" =>
array("Director"=>"J. Renoir","Año"=>1937),
"Roma, ciudad abierta" =>
array("Director"=>"R. Rossellini","Año"=>1944),
"Sabrina" =>
array("Director"=>"B. Wilder, "Año"=>1954),
"Vive como quieras" =>
array("Director"=>"F. Capra","Año"=>1938)
);
([indice1]=>elemento1
[indice2]=>elemento2
....................
[indiceN]=>elementoN)
219
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
foreach(array as valor)
Ejemplo 8.6:
La siguiente sentencia recorre todos los elementos de un array y los muestra en la
página:
Cada elemento del array se asigna en cada iteración a una misma variable, (en el
ejemplo, la variable $nombre), que es la que se manipula. El ejemplo se limita a
imprimir uno a uno todos los nombres que componen el array. Se ha añadido un
comando <HTML> de cambio de línea de forma que cada nueva iteración comience
a escribir en un nuevo renglón. El resultado sería:
Marlon Brando
Gary Cooper
Cary Grant
James Stewart
Si además de recuperar los elementos del array, se desea también conocer el índice,
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Ejemplo 8.7:
Dado el array y el bucle siguientes:
220
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
También es posible construir bucles que recorran todos los elementos del array
usando las restantes estructuras iterativas. El problema que surge habitualmente es
que puede no saberse cuántos elementos existen en el array y cuáles son los índices
asociados a esos elementos, ya que una particularidad de los arrays de PHP es que
no es necesario que sus elementos tengan asociados índices numéricos
consecutivos. Estos problemas pueden salvarse mediante la función
each(array)
Ejemplo 8.8:
La siguiente estructura iterativa recorre e imprime todos los elementos del array
$actores:
while(list($ind,$nombre) = each($actores))
echo "$nombre <br>";
Mientras no se alcance el final del array, en cada iteración del ciclo, el índice del
elemento del array se almacena en la variable $ind y el elemento correspondiente
en la variable $nombre. Tras alcanzar el último elemento, la función
each()toma el valor falso y el ciclo while finaliza.
221
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, también es posible utilizar estas estructuras iterativas anidadas para
recorrer arrays multidimensionales.
Ejemplo 8.9:
$peliculas=array(
"La costilla de Adán" =>
array("Director"=>"G. Cukor","Año"=>1949),
"La gran ilusión" =>
array("Director"=>"J. Renoir","Año"=>1937),
"Roma, ciudad abierta" =>
array("Director"=>"R. Rossellini","Año"=>1944),
"Sabrina" =>
array("Director"=>"B. Wilder","Año"=>1954),
"Vive como quieras" =>
array("Director"=>"F. Capra","Año"=>1938)
);
foreach($peliculas as $indice => $titulo){
echo "Datos de $indice:<BR>\n";
foreach($titulo as $indice => $valor){
echo "   $indice: $valor <BR>\n";
}
}
Director: J. Renoir
Año: 1937
Datos de Roma, ciudad abierta:
Director: R. Rossellini
Año: 1944
Datos de Sabrina:
Director: B. Wilder
Año: 1954
Datos de Vive como quieras:
Director: F. Capra
Año: 1938
222
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
Ejemplo 8.10:
A continuación se define una función de creación de tablas. Toma como argumento
un array bidimensional, que se asume indexado numéricamente con valores
0,1,2,..., y muestra todos sus elementos en una tabla HTML. La función también
recibe como argumentos un array con los rótulos de las columnas y otro con los
encabezamientos de las filas.
function crearTabla($a,$col,$f) {
echo "<TABLE BORDER CELLPADDING=5>";
//Cabecera
echo "<TR>";
echo "<TD> </TD>";
for($i=0;$i<count($col);$i++){
echo "<TH>$col[$i]</TH>";
}
echo "</TR>";
// Cuerpo de la tabla
for($i=0;$i<count($a);$i++){
echo "<TR>";
// encabezado de la fila i-ésima
echo "<TH>$f[$i]</TH>";
// resto de la fila
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
for($j=0;$j<count($a[$i]);$j++){
echo "<TD>{$a[$i][$j]}</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
}
223
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
<?php
include("funciones.php");
echo "<H2>Cálculo de distancias de rutas</H2><BR>";
$datos = array(array(0,100,124,198,235),
array(100,0,224,98,34),
array(124,224,0,115,56),
array(198,98,115,0,122),
array(235,34,56,122,0));
// Generación de los arrays de cabeceras
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
$cabecera = array();
for($i=0;$i<count($datos[0]);$i++){
$aux = $i+1;
$cabecera[$i] = "Ciudad $aux";
}
// Construcción de la tabla
crearTabla($datos,$cabecera,$cabecera);
// Determinación de la ruta
$ruta = array(1,3,5,1);
$suma = 0;
// Generación de una lista con los datos de cada etapa
echo "<UL>";
for($i=0;$i<count($ruta)-1;$i++){
$aux1 = $ruta[$i];
$aux2 = $ruta[$i+1];
$distancia = $datos[$aux1-1][$aux2-1];
224
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
$suma += $distancia;
echo "<LI>De la ciudad $aux1 a la
ciudad $aux2: $distancia kilómetros";
}
echo "<B>Distancia total: $suma kilómetros</B>";
echo "</UL>";
?>
Ejemplo 8.11:
El siguiente fragmento de código:
225
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
8.3.2. SUBDIVISIÓN
Ejemplo 8.12:
El siguiente código:
$oeste = array(
"Solo ante el peligro","Fred Zinnemann","Gary Cooper",
"Raíces profundas","George Stevens","Alan Ladd",
"Horizontes de grandeza","William Wyler");
$oesteOrdenado = array_chunk($oeste,3);
foreach($oesteOrdenado as $indice => $valor){
echo "$indice-> <BR>";
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
da lugar a la salida:
0->
0-> Solo ante el peligro
1-> Fred Zinnemann
2-> Gary Cooper
1->
0-> Raíces profundas
1-> George Stevens
2-> Alan Ladd
2->
226
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
Se ha considerado el valor por defecto del último argumento, lo que provoca que
cada nuevo subarray se numere desde 0. Si se quieren conservar los índices del
array original, se debe dar como tercer argumento el valor TRUE:
$oesteOrdenado = array_chunk($oeste,3,TRUE);
0->
0-> Solo ante el peligro
1-> Fred Zinnemann
2-> Gary Cooper
1->
3-> Raíces profundas
4-> George Stevens
5-> Alan Ladd
2->
6-> Horizontes de grandeza
7-> William Wyler
numéricos que representan el número de veces que cada elemento del array
inicial aparece repetido. Los índices de esta nueva matriz son cada uno de los
elementos iniciales.
Ejemplo 8.13:
227
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
$c = array_count_values($a1);
foreach($c as $indice=>$valor)
echo "$indice: $valor <BR>\n";
Ejemplo 8.14:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
function año($a){
return($a >= 1960);
}
$selección = array_filter($peliculas,"año");
228
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
foreach($seleccion as $indice=>$valor)
echo "$indice: $valor <BR>\n";
Como puede apreciarse, lo primero que se necesita es una función booleana que,
dado un elemento del array, indique si debe ser seleccionado o no. El nombre de
esa función es pasado a array_filter() como segundo argumento. El
resultado final del programa anterior sería:
El apartamento: 1960
Charada: 1963
Doctor Zhivago: 1965
Lawrence de Arabia: 1962
West Side Story: 1961
Ejemplo 8.15:
El siguiente programa lista los nombres de los actores que aparecen como claves en
un array asociativo:
$actores=array(
"Gary Cooper" => array("Solo ante el peligro",
"La gran prueba", "El secreto de vivir"),
"Cary Grant" => array("La fiera de mi niña",
"Arsénico por compasión","Historias de
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Filadelfia"),
"Marlon Brando" => array("La ley del silencio",
"Sayonara","¡Viva Zapata!")
);
$busqueda=array_keys($actores);
foreach($busqueda as $indice=>$valor)
echo "$valor <br>\n";
Gary Cooper
Cary Grant
Marlon Brando
229
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.16:
En este segundo caso, se localizan los índices asociados a un determinado valor. En
concreto, se listan las películas almacenadas correspondientes al año 1940:
$peliculas=array(
"El apartamento"=>1960,"Charada"=>1963,
"Doctor Zhivago"=>1965,"Gigí"=>1958,
"El gran dictador"=>1940,"Historias de
Filadelfia"=>1940,
"El hombre tranquilo"=>1952,"Lawrence de Arabia"=>1962,
"Rebeca"=>1940
);
$busqueda=array_keys($peliculas,1940);
foreach($busqueda as $indice=>$valor)
echo "$valor <br>\n";
El gran dictador
Historias de Filadelfia
Rebeca
Ejemplo 8.17:
Dado el array $actores definido en el Ejemplo 8.15, se comprueba si el nombre
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
de un actor está entre las palabras claves del array, y en caso afirmativo se muestra
el listado de todas sus películas:
$actor="Gary Cooper";
if(array_key_exists($actor,$actores)) {
echo "<B>Películas de $actor:</B><BR>";
foreach($actores[$actor] as $indice=>$valor)
echo "$valor <BR>\n";
}
230
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
Ejemplo 8.18:
En el siguiente ejemplo, se diseña una página de manera que cada vez que un
usuario accede a ella obtiene entradas gratis para dos películas de un ciclo de cine:
— array_search(elemento_buscado,array,valor_logico):
devuelve el índice de elemento_buscado si este pertenece al array dado.
En caso contrario, devuelve FALSE. Si dicho elemento aparece más de una vez
dentro del array, solo se obtiene el índice correspondiente a la primera
aparición. El tercer argumento es opcional y corresponde a un valor lógico que
231
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
indica si el elemento a buscar debe coincidir con el del array tanto en el valor
como en el tipo.
Ejemplo 8.19:
A partir de tres variables que almacenan los datos de una determinada película,
(título, director y año),
se desea generar un array formado por esos tres elementos e indexados con el
nombre de sus respectivas variables. Esto se podría hacer de dos maneras:
232
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
$listaAux=array("pelicula","director","año");
$lista=compact($listaAux);
o bien:
$lista=compact("pelicula","director","año");
Ejemplo 8.20:
A continuación se crean tres variables a partir de los índices de un array dado y se
inicializan automáticamente con los valores correspondientes. Obsérvese que
previamente a la construcción del array y a la llamada a la función extract(),
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
ya se ha inicializado una variable de nombre idéntico a uno de los índices del array.
233
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
extract($pelicula,EXTR_SKIP);
el resultado sería:
234
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
La Tabla 8.2 muestra algunos sencillos ejemplos del uso de esta función.
Ejemplo 8.21:
Las siguientes sentencias permiten apreciar el funcionamiento de esta función:
$a = array(1,2,3,4,5,6);
print_r($a);
print "<br>";
/* inserción de tres nuevos elementos, en sustitución del
cuarto y el quinto: a1=(1,2,3,0,1,2,6) */
array_splice($a,3,2,array(0,1,2));
print_r($a);
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
print "<br>";
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 0 [4] => 1 [5] => 2 [6] => 6 )
Ejemplo 8.22:
El siguiente ejemplo muestra una página de actualización del listado de directores
de los que se tienen películas disponibles.
235
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
236
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
— array_pad(array,tamaño_final,elemento_nuevo): prolonga el
array dado con un nuevo elemento, hasta completar el tamaño especificado. La
prolongación se realiza por la derecha o por la izquierda, dependiendo de si el
valor del argumento tamaño_final es positivo o negativo,
respectivamente. El correcto funcionamiento de la operación exige que el
tamaño especificado en el argumento sea mayor que la dimensión del array.
Ejemplo 8.23:
La función array_unique() considera elementos iguales aquellos cuya
representación en forma de cadena es idéntica. Este ejemplo ilustra su
funcionamiento:
$a = array(1,2,"1",3,4,5,"4",6,7,"6",8,6);
$b = array_unique($a);
foreach($b as $indice=>$valor)
echo "$indice: $valor <BR>\n";
237
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
0: 1
1: 2
3: 3
4: 4
5: 5
7: 6
8: 7
10: 8
Ejemplo 8.24:
A continuación se muestra la unión de dos arrays asociativos en los que una de las
claves se repite en ambos.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
$peliculas1 = array(
"B. Wilder"=>"Primera plana",
"J. Ford"=>"Río Grande",
"G. Cukor"=>"Cena a las ocho");
$peliculas2 = array(
"F. Capra"=>"Sucedió una noche",
"B. Wilder"=>"Sabrina",
"W. Wyler"=>"Horizontes de grandeza");
$p = array_merge($peliculas1,$peliculas2);
238
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
— array_intersect_assoc(array1,array2,array3,...): devuelve un
array con los elementos comunes a todos los argumentos de la función. En la
comparación se tienen en cuenta los índices.
— array_intersect(array1,array2,array3,...): a diferencia de la
función anterior, en este caso, se realiza la intersección pero los índices de los
elementos no se tienen en cuenta en la comparación.
Ejemplo 8.25:
Dados los siguientes arrays:
Si se realiza la operación:
$c = array_diff_assoc($oeste,$comedia,$drama);
pues, si bien los tres primeros elementos del array $oeste se repiten en posteriores
arrays, únicamente el primero de ellos aparece repetido con el mismo índice.
Si en lugar de utilizar la función array_dic_assoc() se ejecuta la siguiente
sentencia:
$c = array_diff ($oeste,$comedia,$drama);
239
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
el array $c sería:
("d"=>"G. Stevens")
ya que ahora los tres primeros elementos del array $oeste deberían ser
eliminados al estar repetidos en los otros, aunque los índices o palabras clave
puedan ser iguales.
Ejemplo 8.26:
El siguiente programa toma una lista con los nombres y apellidos de una serie de
directores de cine. El objetivo es crear una lista nueva donde el nombre de cada
director aparece solo con su inicial. En el programa se utilizan algunas funciones
de manipulación de cadenas de caracteres que serán estudiadas con más detalle en
el próximo capítulo.
240
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
$directoresAbrev = array_map("abreviar",$directores);
// Impresión del resultado
foreach($directoresAbrev as $indice=>$valor){
echo "$indice -> $valor<BR>";
}
D1 -> C. Chaplin
D2 -> S. Donen
D3 -> J. Ford
D4 -> D. Lean
D5 -> V. Minnelli
Ejemplo 8.27:
En el caso de considerar más de un array, la función a aplicar debe tener más de un
argumento. El siguiente programa muestra un ejemplo de esta situación:
function union($a1,$a2){
return("El Óscar del año $a1 es $a2.");
}
$años = array(1940,1945,1951,1955,1960);
$peliculas = array("Rebeca","Días sin huella",
"Un americano en París","Marty",
"El apartamento");
$oscar = array_map("union",$años,$peliculas);
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Ejemplo 8.28:
Con la ayuda de la función array_map() es posible construir un array
multidimensional a partir de una serie de arrays unidimensionales. En el siguiente
ejemplo se muestra el proceso:
241
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.29:
Dado un array de años, correspondientes a películas dadas como índices, a continuación
se utiliza la función array_walk() para escribir en la página un listado con el título
de cada película junto con su año entre paréntesis. Para ello se define previamente una
función que realiza genera el mensaje correspondiente a cada película, y se pasa como
segundo argumento a array_walk() el nombre de esa función:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
function unir($a,$b){
echo "$b, ($a).<BR>";
}
$peliculas = array(
"El apartamento"=>1960,
"Charada"=>1963,
"Doctor Zhivago"=>1965,
"Gigí"=>1958,
"El gran dictador"=>1940,
"Historias de Filadelfia"=>1940,
"El hombre tranquilo"=>1952,
"Lawrence de Arabia"=>1962,
"Rebeca"=>1940
);
242
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
array_walk($peliculas,'unir');
El apartamento, (1960).
Charada, (1963).
Doctor Zhivago, (1965).
Gigí, (1958).
El gran dictador, (1940).
Historias de Filadelfia, (1940).
El hombre tranquilo, (1952).
Lawrence de Arabia, (1962).
Rebeca, (1940).
function unir2($a,$b,$cadena){
echo "$b, $cadena $a.<BR>";
}
la sentencia
243
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.30:
Dado el array del Ejemplo 8.29, si se desea que la lista mostrada incluya las
películas en orden cronológico, desde la más actual a la más antigua, podría
realizarse una simple llamada a la función arsort() antes de la llamada a
array_walk(). La ordenación se produce sobre el valor de los elementos del
array, permaneciendo la clave de cada uno inalterada.
arsort($peliculas);
array_walk($peliculas,'unir',"película realizada en ");
Ejemplo 8.31:
Si en el ejemplo anterior se opta por el orden inverso de los índices:
244
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
krsort($peliculas);
el resultado sería:
$películas = array(
"Ariane"=>
array("Director"=>"B. Wilder","Año"=>1957),
"La costilla de Adán"=>
array("Director"=>"G. Cukor","Año"=>1949),
"La gran ilusión"=>
array("Director"=>"J. Renoir","Año"=>1937),
245
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
// eliminación de repetidos
$columnas = array_unique($columnas);
// ordenación alfabética por apellidos
function extraer($cadena){
return(strchr($cadena," "));
}
$columnasAbrev = array_map("extraer",$columnas);
natcasesort($columnasAbrev);
$indices = array_keys($columnasAbrev);
// encabezados ordenados de las columnas
$columnasOrdenado = array();
for($i=0;$i<count($indices);$i++){
$columnasOrdenado[$i] = $columnas[$indices[$i]];
}
// construcción de la tabla
echo "<TABLE BORDER CELLPADDING=5>\n";
246
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
ARRAYS
echo "<TR>";
echo "<TD> </TD>";
for($i=0;$i<count($columnasOrdenado);$i++){
echo "<TH>$columnasOrdenado[$i]</TH>";
}
echo "</TR>";
// lista con los títulos que hay que colocar en la tabla
$datos = array_keys($peliculas);
array("Director"=>$columnasOrdenado[$j],
"Año"=>$filas[$i]));
// si hay alguna película se crea la celda con
// los títulos obtenidos
if(count($ps)!=0){
echo "<TD ALIGN=CENTER>";
for($k=0;$k<count($ps);$k++){
echo $ps[$k]."<br>";
}
echo "</TD>";
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
}
// en caso contrario la celda es vacía
else
echo "<TD ALIGN=CENTER>"."----------"."</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
247
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
248
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES
PREDEFINIDAS
9.1. INTRODUCCIÓN
PHP cuenta con un gran número de funciones predefinidas, más de 700, que
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
249
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
250
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
— implode(separador,array) y join(separador,array):
funciones que disponen los elementos de un array dado en una cadena
de caracteres, pero separados por la cadena dada como primer
argumento. Ambas funciones actúan de igual forma.
Ejemplo 9.1:
La sentencia
Ejemplo 9.2:
En el siguiente programa, dado un array de arrays, se aplica la función implode() a
cada uno de sus elementos para obtener una serie de cadenas de caracteres.
$peliculasMusicales=array(
array("Un americano en París","V. Minnelli",1951),
array("Hello,Dolly!","G. Kelly",1968),
array("¡Qué noche la de aquel día!","R. Lester",1964));
foreach($peliculasMusicales as $pelicula){
$p = implode("--->",$pelicula);
print "$p<BR>";
}
251
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 9.3:
Dada la siguiente cadena:
la sentencia
str_word_count($cadena);
str_word_count($cadena,1);
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
([0] => Bienvenido, [1] => a, [2] => nuestro, [3] => cine)
str_word_count($cadena,2);
([0] => Bienvenido, [11] => a, [13] => nuestro, [21] => cine)
252
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
Ejemplo 9.4:
Considérese una cadena de 27 caracteres de longitud, si se quiere prolongarla a
ambos lados con 16 caracteres, repartidos a partes iguales a ambos lados, el código
necesario sería el siguiente:
Si como longitud se indica 30, 3 más que la inicial, aunque la nueva cadena aporte
8 caracteres, se truncará en 3, repartidos a izquierda y derecha. Así, el código:
genera la cadena:
253
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 9.5:
La sentencia:
echo str_repeat("oOoxXx",5);
oOoxXxoOoxXxoOoxXxoOoxXxoOoxXx
Ejemplo 9.6:
Dadas las variables
la sentencia
— substr_replace(cadena,reemplazar,posición,longitud): dada
una cadena inicial se obtiene una nueva cadena como resultado de reemplazar
la porción delimitada por los argumentos posición y longitud, por el
254
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
Ejemplo 9.7:
Dadas las cadenas
substr_replace($cadena,$nombreCliente,25,1);
substr_replace($cadena,$nombreCliente,25,-41);
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
substr_replace($cadena,$nombreCliente,-42,1);
substr_replace($cadena,$nombreCliente,-42,-41);
255
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
— strnatcasecmp(cad1,cad2) y strnatcmp(cad1,cad2):
comparan cadenas alfanuméricas teniendo en cuenta el orden alfabético
natural. Se obtiene un valor menor que 0 si la primera cadena es menor
que la segunda; un valor mayor que 0 si es mayor y 0 si ambas son
iguales. La única diferencia entre ambas funciones es que la primera no
distingue entre mayúsculas y minúsculas.
Ejemplo 9.8:
La comparación de cadenas alfabéticas como las siguientes da el mismo resultado
independientemente de la función de comparación empleada:
256
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
— stristr(cadena,fragmento) y strstr(cadena,fragmento):
devuelven la cadena dada desde la primera aparición de un carácter o
fragmento determinado. Si el fragmento no se encuentra, se obtiene el valor
booleano FALSE. La diferencia entre ambos métodos es que el primero no
distingue entre mayúsculas y minúsculas.
— strpos(cadena,fragmento,inicio_búsqueda): se obtiene la
posición correspondiente a la primera aparición de un fragmento determinado
dentro de una cadena dada. Como tercer argumento opcionalmente se puede
indicar la posición a partir de la cual iniciar la búsqueda.
Ejemplo 9.9:
Dada la cadena:
257
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
cadena dada en líneas del ancho indicado. Por defecto, si no se indica otra cosa,
el texto se fragmenta al llegar a una anchura de 75 con un carácter de cambio
de línea: '\n'.
Ejemplo 9.10:
El siguiente código fragmenta una cadena dada considerando como delimitador la coma:
258
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
echo strtok($p,',');
echo "<BR>";
// $i cuenta el número de comas leídas
$i = 1;
// número total de comas dentro de la cadena inicial
$frecuencia=substr_count($p,',');
// bucle que fragmenta el resto de la cadena
while($i<=$frecuencia){
echo strtok(',');
echo "<BR>";
$i++;
}
Otro grupo importante de funciones predefinidas en PHP está constituido por todas
las que permiten realizar manipulaciones con fechas y horas.
En PHP cualquier instante de tiempo viene determinado por un número entero que
representa el número de segundos transcurridos desde las 00:00 del día 1 de enero
de 1970; así por ejemplo, la función que calcula el instante de tiempo actual,
función time(), devuelve en realidad un número entero. Por supuesto, es posible
trabajar con fechas y horas en formatos más sencillos para el usuario, para ello
PHP dispone de la función mktime() que permite generar instantes de tiempo y
la función date() para convertir el instante de tiempo en una cadena de
caracteres siguiendo un formato preestablecido.
259
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
cadena de formato:
260
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
Ejemplo 9.11:
El siguiente programa genera una página de bienvenida en la que se muestra la
fecha local del servidor con el formato escogido en el correspondiente argumento
de la función date():
Ejemplo 9.12:
Si se quiere mostrar el mes en curso, basta la siguiente línea de código:
print(date("M"));
261
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Sin embargo, si se quiere mostrar un mes del año, distinto al actual, se debe añadir
como segundo argumento de la función date() una llamada a la función
mktime() con los argumentos adecuados: en este caso, basta indicar el número
de mes y un día del mes, (el 1, por ejemplo):
print(date("M",mktime(0,0,0,1,1,0)));
Ejemplo 9.13:
Si se desea averiguar el día de la semana correspondiente al 2 de marzo de 1972 se
podría escribir la siguiente línea de código:
print(date("w",mktime(0,0,0,3,2,1972)));
Ejemplo 9.14:
Mediante el siguiente programa se generará el calendario del mes en curso en el
momento de acceder a una página dada, incluyendo además dos enlaces: uno al
calendario del mes anterior y otro al del mes siguiente. El aspecto de este
calendario puede verse en la Figura 9.1.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
262
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
— Datos.php: fichero de datos generales, que almacena dos arrays con los
nombres de los meses y de los días y variables relacionadas con la fecha en
curso. También implementa la función crearCalendario(), que permite
construir el calendario de un mes y año dados. Toda esta información será
añadida en los restantes ficheros con la sentencia include.
— Calendario.php: construye el calendario del mes en curso en el momento de
acceder a la página y se crean dos enlaces que remiten al calendario del mes
anterior y del mes siguiente, respectivamente.
— MesAnterior.php y MesSiguiente.php: generan el calendario correspondiente al
mes anterior y al mes siguiente al mes en curso.
Fichero Datos.php
<?php
$meses = array("Enero", "Febrero", "Marzo",
"Abril", "Mayo","Junio",
"Julio", "Agosto", "Septiembre",
"Octubre", "Noviembre", "Diciembre");
$semana = array("Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do");
$añoActual = date("Y");
$mesActual = date("n");
$mesActualTr = $meses[$mesActual-1];
$diaActual = date("j");
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
function crearCalendario($mes,$año,$fechaActual){
$nummes = array_search($mes,$GLOBALS["meses"])+1
$diasemana=date("w",mktime(0,0,0,$nummes,1,$año));
if($diasemana==0)
$diasemana=7;
$diasMes= date("t",mktime(0,0,0,$nummes,1,$año));
// cabeceras de la tabla
for($i=0;$i<=6;$i++){
263
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
echo "<TH>".$GLOBALS["semana"][$i]."</TH>";
}
echo "</TR>";
else
echo "<TD>$i</TD>";
}
$diasemana++;
if($diasemana==8) {
echo "</TR>";
echo "<TR>";
$diasemana=1;
}
}
echo "</TR></TABLE>";
}
?>
Como puede apreciarse, este fichero comienza con las definición de dos arrays,
que almacenan los nombres de los meses y de los días de la semana, y cuatro
264
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
Fichero Calendario.php
<?php
include("Datos.php");
crearCalendario($mesActualTr,$añoActual,true);
$mesAnt = "MesAnterior.php";
$mesSig = "MesSiguiente.php";
echo "<BR><A HREF=$mesAnt>Mes anterior</A> <BR>
<A HREF=$mesSig>Mes próximo</A>";
?>
265
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Fichero MesAnterior.php
<?php
include("Datos.php");
if($mesActual==1){
$aux = 11;
$año = $añoActual-1;
}
else{
$aux = $mesActual-2;
$año = $añoActual;
}
crearCalendario($meses[$aux], $año, false);
?>
Fichero MesSiguiente.php
<?php
include("Datos.php");
if($mesActual==12){
$aux = 0;
$año = $añoActual+1;
}
else{
$aux = $mesActual;
$año = $añoActual;
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
}
crearCalendario($meses[$aux], $año, false);
?>
Estos dos últimos ficheros cargan de nuevo todos los datos y lo único que realizan
es una modificación de las variables que identifican al mes en curso. Una vez
modificadas esas variables se procede a efectuar la llamada a la función de
creación del calendario.
266
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
FUNCIONES PREDEFINIDAS
Función Descripción
abs(n) Obtiene el valor absoluto de un entero o en coma flotante.
round(n) Redondea a entero un número dado.
ceil(n) Obtiene el valor entero superior más próximo a n.
floor(n) Obtiene el valor entero inferior más próximo a n.
cos(n) Calcula el coseno de un ángulo.
sin(n) Calcula el seno de un ángulo
tan(n) Calcula la tangente de un ángulo.
exp(a) Calcula el valor ea.
log(n) Calcula el logaritmo neperiano de n.
min(n1,n2,...) Obtiene el menor valor de un número determinado de
min(array) argumentos numéricos o de los elementos de un array.
Si alguno de estos números es decimal, el resultado
también tendrá este formato.
max(n1,n2,…) Obtiene el mayor valor de un número determinado de
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
267
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
268
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN
ORIENTADA A
OBJETOS
10.1. INTRODUCCIÓN
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Los dos elementos básicos de todo lenguaje de programación estructurada son las
variables y las funciones. Las primeras se utilizan para almacenar datos, y las
segundas realizan acciones sobre esos datos. En un esquema de programación
estructurada tradicional ambos elementos básicos se encuentran perfectamente
diferenciados, definiendo las variables por un lado y las funciones por otro.
269
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Los objetos definidos son elementos dinámicos, en todo momento tienen un estado
(determinado por los valores de sus variables) y un comportamiento (determinado
por sus métodos).
Ejemplo 10.1:
Piénsese en la gestión de un cine; en un cine se maneja información sobre
películas, proyecciones, clientes,... En definitiva, se podría pensar en diferentes
objetos con diferentes características (variables) y diferentes acciones (métodos)
que pueden realizar cada uno:
— Cada objeto película tendrá asociadas cuatro variables que indicarán el título,
el director, la lista de actores y el año de producción. Además tendrá un
método que permitirá generar la ficha artística de la película (véase Figura
10.1).
— Cada objeto proyección tendrá asociadas tres variables que indicarán el día y la
hora de la proyección, y la película a proyectar. Un método del objeto permitirá
asignar una película a la proyección (véase Figura 10.2).
— Cada objeto cliente tendrá asociadas tres variables que indicarán el nombre y la
edad del cliente y la lista de proyecciones para las que ha adquirido una
entrada. Además de sus variables, un cliente también dispondrá de un método
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
que le permitirá adquirir una entrada para una proyección (véase Figura 10.3).
270
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
PELÍCULA
VARIABLES: MÉTODO:
• Título • Generar ficha
• Director
• Actores
• Año
PROYECCIÓN
VARIABLES: MÉTODO:
• Día • Asignar película
• Hora
• Película
CLIENTE
VARIABLES: MÉTODO:
• Nombre • Adquirir entrada
• Edad
• Lista proyecciones
271
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
CINE
VARIABLES: MÉTODOS:
• Día del espectador • Buscar cliente
• Tarifa normal • Calcular importe
• Tarifa reducida • Crear proyección
• Proyecciones • Crear cliente
• Clientes
Por último, los objetos podrían disponer de métodos específicos para acceder a sus
variables, tanto para consultar como para cambiar sus valores. Además, los objetos
suelen disponer de métodos, denominados constructores, que son llamados cuando
se crea el objeto.
272
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
class NombreClase {
var
variables de la clase
métodos
}
Ejemplo 10.2:
A continuación se presenta el esquema de las clases de objetos que fueron
presentados en el Ejemplo 10.1. En esta primera aproximación se incluye
únicamente la definición de las variables de cada clase y la declaración de los
métodos; posteriormente se añadirá la implementación completa de estos últimos.
class Pelicula {
var $titulo,
$director,
$actores,
$año;
// implementación de métodos
function generar_ficha() {
}
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
class Proyeccion {
var $dia_hora;
var $pelicula;
// implementación de métodos
function asignar_pelicula($p) {
}
}
class Cliente {
var $nombre;
var $edad;
var $lista_proyecciones;
273
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
// implementación de métodos
function adquirir_entrada($proy) {
}
}
class Cine {
var $dia_espectador,
$tarifa_normal,
$tarifa_reducida,
$lista_proyecciones,
$lista_clientes;
// implementación de métodos
function calcular_importe($c,$proy) {
function crear_proyeccion($t,$p) {
function crear_cliente($n,$e) {
function buscar_cliente($c) {
}
}
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
274
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
10.2.1. CONSTRUCTORES
Las clases definen el prototipo de los objetos, definiendo sus métodos y declarando
sus variables; pero, ¿cómo se inicializan estas variables? Entran aquí en juego dos
nuevos elementos: la variable $this y el constructor de la clase.
Ejemplo 10.3:
La creación de un objeto de la clase Pelicula exige el aportar la información
necesaria para ese objeto, en este caso concreto, esa información se traduce en los
valores para sus 4 variables. El constructor de la clase puede recibir como
argumentos esos cuatro valores y asignarlos a las respectivas variables del objeto.
function Pelicula($t,$d,$as,$a){
$this->titulo = $t;
$this->director = $d;
$this->actores = $as;
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
$this->año = $a;
}
Obsérvese cómo la sintaxis, para acceder a las variables del objeto, exige indicar el
nombre de la variable a continuación de -> pero sin el signo $.
Esta misma sintaxis puede ser utilizada dentro de cualquier otro método para
acceder a las variables del objeto. Por ejemplo, a continuación se incluye la
definición completa de la clase Pelicula, incluyendo el método que genera su
ficha artística:
class Pelicula {
var $titulo,
$director,
$actores,
$año;
275
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
// constructor
function Pelicula($t,$d,$as,$a){
$this->titulo = $t;
$this->director = $d;
$this->actores = $as;
$this->año = $a;
}
// implementación de métodos
function generar_ficha() {
print "<H3> $this->titulo ($this->año)</H3>";
print "Dirigida por $this->director y
protagonizada por:<BR>";
foreach($this->actores as $ac)
print "$ac <BR>";
}
}
class Cliente {
var $nombre;
var $edad;
var $lista_proyecciones;
// constructor
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
function Cliente($n,$e){
$this->nombre = $n;
$this->edad = $e;
$this->lista_proyecciones = array();
}
// implementación de métodos
function adquirir_entrada($proy) {
array_push($this->lista_proyecciones,$proy);
}
}
Es posible que el constructor no reciba todos los valores iniciales para las variables
del objeto y que se disponga de métodos para realizar esa asignación
posteriormente, tal como ocurre en la clase Proyeccion:
276
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
class Proyeccion {
var $dia_hora;
var $pelicula;
// constructor
function Proyeccion($t){
$this->dia_hora = $t;
}
// implementación de métodos
function asignar_pelicula($p) {
$this->pelicula = $p;
}
}
Se puede optar por inicializar algunas variables con valores fijos desde el propio
constructor, por ejemplo, asignando valores por defecto para dichas variables. El
constructor de la clase Cine podría ser:
function Cine($d,$t=5,$tr=3.5){
$this->dia_espectador = $d;
$this->tarifa_normal = $t;
$this->tarifa_reducida = $tr;
$this->lista_proyecciones = array();
$this->lista_clientes = array();
}
Una vez definidas las clases que intervienen en el programa llega el momento de
crear los objetos particulares. En la terminología de la programación orientada a
objetos estos reciben el nombre de ejemplares de la clase.
277
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
El valor devuelto por el operador new debe ser asignado a una variable para poder
hacer referencia posteriormente a dicho objeto.
Ejemplo 10.4:
Se podría crear un nuevo objeto de la clase Pelicula con la sentencia:
Como puede observarse el constructor recibe los cuatro argumentos necesarios para
inicializar las cuatro variables del objeto. La tercera de las variables recibirá como
valor un array con los nombres de los protagonistas de la película.
Ejemplo 10.5:
Dado el objeto $p creado en el Ejemplo 10.4, se podría efectuar una llamada
$p->generar_ficha();
278
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
Ejemplo 10.6:
Para completar la definición de las clases del Ejemplo 10.1, se incluye a
continuación la definición de la clase Cine, con la implementación de todos sus
métodos.
class Cine {
var $dia_espectador,
$tarifa_normal,
$tarifa_reducida,
$lista_proyecciones,
$lista_clientes;
// constructor
function Cine($d,$t=5,$tr=3.5){
$this->dia_espectador = $d;
$this->tarifa_normal = $t;
$this->tarifa_reducida = $tr;
$this->lista_proyecciones = array();
$this->lista_clientes = array();
}
// implementación de métodos
function calcular_importe($c,$proy) {
// obtención del dia de la semana de la proyección
$dia_proy = date("w",$proy->dia_hora);
if(($dia_proy == $this->dia_espectador)||
($c->edad)<=15 || ($c->edad>=65))
$t=$this->tarifa_reducida;
else
$t=$this->tarifa_normal;
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
return $t;
}
function crear_proyeccion($t,$p) {
$proy = new Proyeccion($t);
$proy->asignar_pelicula($p);
array_push($this->lista_proyecciones,$proy);
}
function crear_cliente($n,$e) {
$cl = new Cliente($n,$e);
array_push($this->lista_clientes,$cl);
}
function buscar_cliente($n) {
// búsqueda del nombre en el array de clientes
279
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
foreach($this->lista_clientes as $cliente) {
if($cliente->nombre == $n)
return $cliente;
}
return FALSE;
}
Ejemplo 10.7:
Una vez definidas todas las clases del Ejemplo 10.1 en un fichero de nombre
clases.php, se encuentran listas para ser utilizadas en cualquier otro programa. A
continuación se incluye un sencillo programa que crea diferentes objetos de las
clases anteriores y realiza con ellos las acciones que permiten sus métodos.
include "clases.php";
"J. Huston",
array("H. Bogart", "M. Astor"),
1941);
$c->crear_proyeccion(mktime(16,0,0,12,23,2004),$p);
280
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
10.4. HERENCIA
La programación orientada a objetos tiene por objetivo la estructuración de los
programas en clases; cada clase describe las características generales que un objeto
debe poseer. A partir de las clases definidas es posible también diseñar objetos
similares con nuevas particularidades; de esta forma surgen los conceptos de
subclases y herencia.
Al igual que ocurre con los objetos del mundo real, una clase de objetos puede ser
vista como una subclase de otra; de manera que hereda todas las propiedades
(variables y métodos) de la superclase. Sin embargo, la verdadera utilidad de las
subclases es el permitir a estas la definición de nuevas variables, la modificación de
los métodos heredados o la implementación de nuevos métodos.
Ejemplo 10.8:
Sobre el esquema de clases presentado en el Ejemplo 10.1 se podrían realizar
algunas modificaciones. En primer lugar se podrían definir varias subclases que
permitan clasificar las películas que el cine gestiona en función de su género
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
(Figura 10.5). Así por ejemplo, las comedias constituyen una subclase de películas;
lo que significa que toda comedia tiene las características generales de una
película, pero puede tener características propias de este género.
281
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
PELÍCULA
CLIENTE
VARIABLES: MÉTODO:
• Nombre • Adquirir entrada
• Edad
• Lista proyecciones
SOCIO
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
282
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PROGRAMACIÓN ORIENTADA A OBJETOS
métodos de la subclase
}
Ejemplo 10.9:
La definición de las subclases plateadas en el Ejemplo 10.8 serían:
}
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
// constructor
function Socio($n,$e,$num){
$this->nombre = $n;
$this->edad = $e;
283
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
$this->lista_proyecciones = array();
$this->num_socio = $num;
$this->puntos = 0;
}
// implementación de métodos
function adquirir_entrada($proy) {
array_push($this->lista_proyecciones,$proy);
$this->puntos += 10;
}
function canjear_regalo(){
$p = $this->puntos;
if($p >= 100) {
print "¡Enhorabuena! ¡Le obsequiamos con
nuestro regalo sorpresa!";
$this->puntos -= 100;
}
else{
$aux = 100-$p;
print "Le faltan $aux puntos para conseguir
un premio";
}
}
}
Como puede observarse, los objetos de esta subclase tienen todas las características
de la clase general Cliente (nombre, edad y lista_proyecciones), pero
además poseen dos nuevos atributos: num_socio y puntos. Cuentan también
con el mismo método adquirir_entrada(), pero definido de nuevo,
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
adaptándose así a las características de la subclase; en este caso, cada vez que se
adquiera una entrada se incrementará en 10 unidades el valor de la variable
puntos. La subclase incluye también un nuevo método, canjear_regalo(),
que será propio de los objetos de esta nueva clase.
284
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
COOKIES
Las cookies no fueron diseñadas para espiar o invadir la privacidad de los usuarios
de Internet, su principal objetivo es identificar al usuario y poder de esta manera
preparar páginas personalizadas. Son muy prácticas también para almacenar
información como el número de visitas, preferencias, estado de conexión y, en
general, información que sirva para realzar la navegación del cliente y permita
simular una conexión continua. Por ejemplo, gracias a las cookies el usuario podría
continuar la navegación por un sitio web en el último punto en el que lo dejó en su
última conexión.
285
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
setcookie(nombre, valor)
y define una cookie con el nombre y valor indicados en los argumentos. En cierta
forma una cookie puede verse como una variable que tiene un identificador y un
valor asignado, de hecho, el nombre de la cookie se convertirá en nombre de una
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Recordar de nuevo que el script que incorpore la llamada a la función anterior debe
ser colocado delante de cualquier comando HTML.
setcookie(nombre)
286
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
COOKIES
Ejemplo 11.1:
Supóngase que se dispone de un formulario en el que se solicita al usuario que
escriba su nombre y que se desea que ese nombre pueda ser utilizado directamente
cuando el usuario visite otras páginas del servidor.
<HTML>
<HEAD><TITLE>Registro</TITLE></HEAD>
<BODY>
<H1>Registro como usuario</H1>
Introduzca su nombre:
<FORM ACTION="cookie.php" METHOD="GET">
<INPUT TYPE="text" NAME="nombre"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</BODY>
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
</HTML>
<?php
if (isset($nombre))
setcookie("nomusuario", $nombre);
?>
<HTML>
<HEAD><TITLE>Confirmación</TITLE></HEAD>
<BODY> Muchas gracias por registrarte.
</BODY>
</HTML>
287
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Obsérvese que el script PHP que tiene la definición de la cookie está colocado antes de
cualquier comando HTML, incluso antes del comando <HTML>. Además se utiliza la
función isset() para asegurar que la variable $nombre tiene un valor asignado
correctamente desde el formulario. En el caso de que esta variable tenga un valor
asignado se está generando una cookie de nombre nomusuario y con el valor
introducido por el usuario en el formulario previo.
También es posible definir varias cookies bajo un nombre común, es decir, definir
arrays de cookies. Para ello se utiliza la notación habitual de definición de arrays
en PHP.
Ejemplo 11.2:
Imagínese que se desea guardar en un array de cookies las últimas películas vistas
por cada cliente de Cinem@s, las cookies podrían ser generadas de la siguiente
manera:
En este caso, cuando se recupere el valor de estas tres cookies, se obtendrá una
variable de tipo array y de nombre $peliculas.
Un vez que la cookie ha sido generada, esta permanece en el equipo del cliente y
será enviada al servidor cuando se realice una nueva carga de una página del
servidor para la que la cookie sea visible.
Ejemplo 11.3:
Supóngase que el cliente que se registró en el formulario anterior, y para el que se
ha generado una cookie con su nombre, visita ahora una nueva página del servidor;
288
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
COOKIES
esta nueva página tendrá acceso a una variable $nomusuario con la que podrá
preparar un contenido personalizado:
<HTML>
<HEAD><TITLE>Cartelera</TITLE></HEAD>
<BODY>
<H1> Nuestra cartelera </H1>
<?php
if (isset($nomusuario))
echo "$nomusuario, nuestros estrenos para ti
son:";
else
echo "Por favor, regístrese";
?>
<TABLE>
.............
.............
.............
</TABLE>
</BODY>
</HTML>
Ejemplo 11.4:
En este nuevo ejemplo los procesos de generación y de recuperación de la cookie
tienen lugar en la misma página. Imagínese, que interesa en todo momento conocer
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
la fecha y hora del último acceso de cada cliente a la página; esto podría realizarse
fácilmente con ayuda de una cookie que se almacene en cada cliente. El código
completo de la página sería:
<?php
$v = date("d/m/Y \a \l\a\s H:i");
setcookie("visita", $v, time()+30*24*3600);
?>
<HTML>
<HEAD><TITLE>Página de inicio</TITLE></HEAD>
<BODY>
<H1>Bienvenido a nuestra página</H1>
<?php
if (isset($visita))
echo "La última vez que nos visitaste fue el $visita";
289
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
?>
....................................
....................................
</BODY>
</HTML>
Como puede verse, en primer lugar se genera una cookie con la fecha y hora de
acceso; este script está colocado antes de cualquier otro código. En el segundo
script se utiliza esa cookie para escribir en la página el momento de ese último
acceso.
Cuando un cliente accede a una página, el servidor solicita los valores de todas las
cookies antes de realizar cualquier otra operación, una vez recibidos esos valores
comienza a procesar la página. Este hecho hace que la cookie generada en el
primer script no será visible hasta la siguiente carga de la página, ya que en primer
lugar el servidor recibe las cookies generadas y posteriormente actualiza su valor
para la siguiente carga.
PHP dispone de una variable global de tipo array en la que siempre se encuentran
almacenadas todas las cookies que el servidor ha recibido del cliente, dicho array
es $HTTP_COOKIE_VARS y se trata de un array asociativo en el que el índice de
cada elemento es el nombre de una cookie y el valor almacenado en el array el
valor de dicha cookie.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Ejemplo 11.5:
Si se ha definido una cookie de la siguiente manera:
$micookie
$HTTP_COOKIE_VARS["micookie"]
290
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
COOKIES
foreach($HTTP_COOKIE_VARS as $c) {
echo "$c <BR>";
}
while (list($n,$v)=each($HTTP_COOKIE_VARS)) {
echo "$n = $v <BR>";
}
A partir de la versión PHP 4.1.0 también se dispone del array de cookies definidas
en otra variable global de nombre $_COOKIE.
Si se desea que la cookie permanezca en el equipo del usuario cuando este cierre la
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
setcookie(nombre,valor,expiracion)
291
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Para borrar una cookie que tiene establecido un valor con periodo de expiración
antes de que dicho periodo finalice, debe utilizarse la sintáxis:
Ejemplo 11.6:
En este ejemplo se utiliza una cookie para almacenar en el equipo cliente el
instante de tiempo correspondiente al último acceso a la página. El programa
comprobará si han transcurrido más de 7 días desde ese último acceso y en caso
afirmativo mostrará un mensaje avisando de ese hecho.
<?php
$ahora = time();
setcookie("ultima", $ahora, $ahora + 30*24*3600);
if(isset($ultima) and ($ahora - $ultima > 7*24*3600))
echo "Hace más de una semana que no nos
visitabas"
?>
<HTML>
<HEAD><TITLE>Página de inicio</TITLE></HEAD>
<BODY>
<H1>Bienvenido a nuestra página</H1>
....................................
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
....................................
....................................
</BODY>
</HTML>
292
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
COOKIES
Ejemplo 11.7:
En este nuevo programa se utilizará una cookie para generar un contador de
accesos individuales de cada usuario. El número de accesos acumulados por el
usuario será almacenado en una cookie de nombre nvis.
<?php
if(isset($nvis)) {
$nvis++;
setcookie("nvis", $nvis, time() + 30*24*3600);
} else {
setcookie("nvis", 1, time() + 30*24*3600);
$nvis=1;
}
?>
<HTML>
<HEAD><TITLE>Página de inicio</TITLE></HEAD>
<BODY>
<H1>Bienvenido a nuestra página</H1>
<?php
echo "Esta es tu visita nº $nvis";
?>
....................................
....................................
</BODY>
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
</HTML>
293
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
294
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE
FICHEROS
295
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
fopen(Nombrefichero, ModoApertura)
El nombre del fichero se indicará con la ruta relativa de acceso desde la página que
incorpora el script.
296
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE FICHEROS
Ejemplo 12.1:
Si el fichero es abierto con la siguiente sentencia:
$f = fopen("Datos.txt", "r");
$f = fopen("Pruebas/comentarios.txt", "a");
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Una vez abierto un fichero se realizarán sobre él las operaciones de lectura y/o
escritura y cuando ya no se utilice se debe proceder a cerrarlo. Para el cierre del
fichero existe una nueva función que recibe como argumento el identificador de
fichero que se genera en la operación de apertura. Esta función es:
fclose(idfichero)
De esta manera, la estructura básica de todo programa que trabaje con ficheros
sería:
297
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
$f = fopen("mifichero.txt", "a");
..........................
..........................
fclose($f);
fgets(idfichero)
Para saber si el apuntador interno del fichero ha alcanzado el final se puede utilizar
la función booleana feof().
Ejemplo 12.2:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
El siguiente programa realiza una lectura línea a línea del contenido de un fichero
de texto y lo escribe en la propia página web:
<?php
$f = fopen ("datos.txt","r");
while(!feof($f)){
$linea=fgets($f);
print $linea."<BR>";
}
fclose($f);
?>
298
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE FICHEROS
fgets(idfichero, n+1)
Con esta sintaxis la función leería, a partir del apuntador interno del fichero, n
caracteres o hasta alcanzar un fin de línea, lo que antes ocurra.
fread(idfichero, n)
Esta función lee n caracteres del fichero o hasta alcanzar el fin del fichero (lo que
antes ocurra).
filesize(nombrefichero)
Ejemplo 12.3:
Si se desea transferir el contenido completo del fichero a una variable en un
programa PHP se podrían realizar las siguientes operaciones:
<?php
$fnom = "/ficheros/mifichero.txt";
$f = fopen($fnom, "r");
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Para una lectura completa del contenido del fichero en una sola operación PHP
dispone también de la función file(). Una ventaja de esta función es que no
necesita realizar la apertura previa del fichero con fopen() ni el cierre con
fclose(). La función devuelve directamente una array de cadenas de caracteres
con cada una de las líneas del fichero.
299
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 12.4:
El siguiente programa utiliza la función file() para hacer una lectura completa
de un fichero en una sola operación, y posteriormente recorre el array resultante
para mostrar su contenido en la página:
<?php
$contenido = file('datos.txt');
foreach($contenido as $linea) {
print $linea;
print "<BR>";
}
?>
fgetc(idfichero)
Ejemplo 12.5:
El siguiente programa realiza una lectura completa del fichero y copia en la página
únicamente aquellos caracteres que ocupan posiciones pares dentro del fichero.
<?php
$f = fopen("mifichero.txt","r");
$nc = 0;
while(!feof($f)){
$c = fgetc($f);
$nc++;
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
if ($nc % 2 == 0)
print $c;
}
fclose($f);
?>
300
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE FICHEROS
fscanf(idfichero,formato)
fscanf(idfichero,formato,variables)
Las cadenas de formato de lectura incluyen una serie de codificaciones que señalan
el tipo de dato a leer. En concreto, los códigos de formato son los que se muestran
en la siguiente tabla:
Ejemplo 12.6:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Como puede apreciarse este fichero está constituido por diferentes líneas en las que
se muestra para cada cliente su nombre, su edad y el gasto total separados por
301
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
tabulaciones. La lectura de los datos necesita conocer esta estructura para poder
leer en cada operación de lectura los tres datos de un cliente.
El programa PHP que realiza la lectura del fichero anterior y genera una lista
HTML a partir del contenido del mismo es:
<?php
$f = fopen("clientes.txt","r");
print "<UL>";
while ($datos = fscanf($f, "%s\t%d\t%f")) {
list($nombre, $edad, $gasto) = $datos;
print "<LI> $nombre de $edad años ha realizado " .
" un gasto total de $gasto euros. <BR>";
}
print "</UL>";
fclose($f);
?>
El programa anterior lo primero que realiza es la apertura del fichero con permiso de
lectura. A continuación genera la etiqueta HTML de inicio de lista y comienza el
bucle de lectura. En cada una de las iteraciones del bucle se realiza la llamada a la
función fscanf() para que lea, en este orden, una cadena de caracteres, un
tabulador, un número entero, otro tabulador y un número en coma flotante (cadena de
formato "%s\t%d\t%f"). Los tres valores leídos serán almacenados en el array de
nombre $datos. Cuando se alcance el final del fichero, y por tanto no existan más
datos a leer, la función fscanf() devolverá un valor booleano falso y por tanto el
bucle de lectura finalizará.
Dentro del cuerpo del bucle se utiliza la función list() para asignar valores a
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
tres variables ($nombre, $edad y $gasto) a partir de los tres valores que han
sido almacenados en el array $datos. Con esos tres valores de las variables se
genera el correspondiente ítem de la lista.
En concreto, el resultado del programa anterior sería una lista como la siguiente:
302
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE FICHEROS
Ejemplo 12.7:
Utilizando esta sintaxis alternativa, el programa del Ejemplo 12.6 podría escribirse
de la siguiente manera:
<?php
$f = fopen ("datos.txt","r");
print "<UL>";
while(!feof($f)){
$linea=fscanf($f,"%s\t%d\t%f",&$nombre,&$edad,&$gasto);
print "<LI> $nombre de $edad años ha realizado " .
" un gasto total de $gasto euros. <BR>";
}
print "</UL>";
fclose($f);
?>
fwrite(idfichero, cadena)
fwrite(idfichero, cadena, numCaracteres)
303
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 12.8:
Programa que genera un fichero de texto con los 100 primeros números pares:
<?php
$f = fopen("NumerosPares.txt","a");
for($i=1;$i<100;$i++) {
fwrite($f,2*$i."\t");
}
fclose($f);
?>
Ejemplo 12.9:
Utilizando las funcionalidades de lectura y escritura de ficheros en PHP se podría
crear en una página un sencillo contador de accesos. Bastaría con generar un
fichero de texto cuyo contenido inicial sea el valor 0 e incluir el siguiente programa
en la página correspondiente:
<?php
$f = fopen("contador.txt","r+");
$c = fgets($f);
$c++;
rewind($f);
fwrite($f,$c);
fclose($f);
print "Número de visitas de esta página: $c";
?>
esa variable en una unidad, reinicia el puntero del fichero al inicio del mismo
(función rewind()) y escribe el nuevo valor sobre el fichero borrando el anterior.
Con el valor de la variable muestra además un mensaje en la página indicando el
número total de accesos.
Para comenzar se debería diseñar un formulario HTML a través del cual el usuario
hará sus comentarios. El formulario puede estar formado por una simple área de
texto y un botón de envío.
304
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE FICHEROS
El aspecto final del formulario podría ser el que se muestra en la Figura 12.1 y su
código:
<html>
<head><title>Comentarios</title></head>
<body>
Por favor, ayúdenos a mejorar. <br>
Cualquier comentario que quiera realizar sobre nuestra
empresa nos será de utilidad
<form action="observaciones.php">
<textarea name="ob" rows=4 cols=30 >
</textarea>
<input type="submit" value="Enviar comentario">
</form>
</body>
</html>
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
<?php
$f=fopen("Comentarios.txt","a");
fputs($f,"-------------------\n");
$fecha = date("d/m/Y");
fputs($f,"Fecha: $fecha \n");
305
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
-------------------
Fecha: 12/10/2004
Comentario:
Deberían hacer un esfuerzo por mejorar la limpieza de los
aseos
-------------------
Fecha: 14/10/2004
Comentario:
La verdad es que todo ha estado perfecto. Enhorabuena!!!
copy(nombreOrigen, nombreDestino)
Los argumentos que recibe esta función son los nombres del fichero de origen y el
de destino. En el caso que estos se encuentren en un directorio diferente al del
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
documento base (el que contiene el programa PHP) deberán indicarse los nombres
de los ficheros con sus respectivas rutas relativas. Cuando el fichero destino ya
existe, la operación de copiado borrará el fichero existente.
Ejemplo 12.10:
Para realizar una copia de seguridad de un fichero cuyo nombre se encuentre en la
variable $nfichero, se podría utilizar la sentencia:
if (copy($nfichero, $nfichero.'.bak')) {
print ("Copia de seguridad realizada correctamente");
} else {
306
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
MANEJO DE FICHEROS
rename(nombreAntiguo, nombreNuevo)
unlink(nombreFichero)
file_exists(nombreFichero)
Ejemplo 12.11:
El siguiente formulario incluye uno de estos campos al que se le ha dado el nombre
fichero:
<FORM ENCTYPE="multipart/form-data"
307
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
ACTION="RecibirFichero.php" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10000">
Fichero: <INPUT NAME="fichero" TYPE="file">
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
Como puede apreciarse, además del campo de tipo file, el formulario incluye un
campo oculto que permite indicar el tamaño máximo de los ficheros que se
permitirá al usuario enviar (MAX_FILE_SIZE).
<?php
print "Fichero recibido";
rename($fichero,$fichero_name);
?>
308
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS
RELACIONALES Y EL
LENGUAJE SQL
13.1. INTRODUCCIÓN
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Las bases de datos constituyen hoy en día los elementos clave sobre los que se
apoyan los sistemas de información de empresas e instituciones. Una base de datos
podría definirse como una colección de datos interrelacionados que son
almacenados en un soporte informático. Algunas razones que justifican su uso son
su capacidad para almacenar grandes volúmenes de información, la optimización
de su gestión, la facilidad para realizar consultas y la exactitud, rapidez y fiabilidad
en su administración.
309
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.1:
Un banco podría almacenar la información sobre sus clientes y los saldos en sus
cuentas bancarias mediante dos simples tablas:
Cada una de las filas de las tablas se suele denominar tupla o registro, y a su vez
está formada por una serie de valores cuyo tipo coincide con el del correspondiente
atributo.
En este caso, el atributo común entre las dos tablas (Nº cuenta) es el que permite
relacionar los clientes con sus cuentas. Además, lo normal es que cada tabla tenga
un atributo o conjunto de atributos cuyo valor identifique de forma única a los
registros, este atributo es el que se denomina clave. En el caso de la tabla de
310
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
clientes, el atributo DNI es una clave, ya que es imposible que dos clientes distintos
tengan el mismo DNI.
En la definición de una base de datos relacional se debe indicar claramente la
estructura de cada tabla, con los nombres y tipos de cada uno de sus atributos, así
como las diferentes claves y otras restricciones sobre los mismos.
El ejemplo anterior ilustra una situación bastante simplificada que, por supuesto,
tiene algunos inconvenientes que podrían ser superados con una mejor elección de
tablas. Por ejemplo, con el diseño anterior, cuando un cliente tiene más de una
cuenta, tal como ocurre en este caso, se duplican sus datos. La utilización de una
tabla intermedia que sirva de enlace entre los DNI y los números de cuenta evitaría
este problema. En definitiva, el correcto diseño de una base de datos no es algo
trivial y requiere una cuidadosa planificación. A este respecto existe una teoría
bastante desarrollada sobre el diseño de bases de datos para evitar las redundancias
e inconsistencias: la teoría de la normalización. No es el objetivo de este libro
profundizar en aspectos de diseño de bases de datos, aquel lector que esté
interesado en estos temas puede acudir a la amplia bibliografía específica.
311
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
1. Las películas.
2. Las salas disponibles.
3. Las proyecciones.
4. Las entradas.
5. Los clientes.
Cada una de las entidades se caracterizará por unos atributos, así cada película
tiene un título, un director, una lista de actores, un género, un año de realización,...
A cada atributo se le asignará un tipo de datos concreto, así por ejemplo, el título
de una película puede ser tratado como una cadena de un máximo de 50 caracteres,
o el año como un número entero.
Una vez establecidos los atributos de cada entidad, el siguiente paso es definir las
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
312
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Los atributos que en cada tabla aparecen señalados con las siglas PK (Primary
Key) corresponden a las claves de cada una de ellas. En cambio, los señalados con
FK (Foreign Key) corresponden a atributos que son claves en otras tablas (claves
foráneas) y sirven para relacionar los registros de una tabla con los de la
subordinada.
Los atributos que tendrá cada una de las entidades consideradas son descritos en detalle
en la Tabla 13.1 (entidad Películas), Tabla 13.2 (entidad Proyecciones), Tabla 13.3
(entidad Salas), Tabla 13.4 (entidad Entradas) y Tabla 13.5 (entidad Clientes).
313
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
ENTIDAD PELÍCULAS
Nombre de atributo Tipo de datos Descripción
IDPELICULA Valor numérico que actuará de
Número entero
identificador de cada película
TITULO Cadena de caracteres Título de la película
ACTORES Listado de actores de la película que se
Cadena de caracteres
presentarán separados por comas
PRODUCCION Productor, o productores, en su caso, de
Cadena de caracteres
la película
DIRECCION Cadena de caracteres Director o directores de la película
GUION Cadena de caracteres Guionista o guionistas de la película
ANNO Número entero Año de realización de la película
DURACION Número entero Duración de la película en minutos
NACIONALIDAD Cadena de caracteres Nacionalidad de la película
Género de la película elegido entre una
GENERO Cadena de caracteres serie de opciones predeterminadas:
drama, comedia, acción....
Opción que establece restricciones de
EDAD_RESTRICCION Cadena de caracteres edad para los espectadores: apta, mayores
de 7, mayores de 13, mayores de 18
SINOPSIS Cadena de caracteres Breve resumen de la película
CARTELERA Imagen del cartel promocional de la
Imagen
película
Tabla 13.1 Atributos de la entidad Películas
ENTIDAD PROYECCIONES
Nombre de atributo Tipo de datos Descripción
IDPROY Valor numérico que actuará de
Número entero
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
314
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
ENTIDAD SALAS
Nombre de atributo Tipo de datos Descripción
NUM_SALA Valor numérico identificativo de cada
Número entero
sala
AFORO Número entero Número total de asientos de la sala.
NUM_FILAS Número entero Número total de filas de la sala
Cadena de caracteres que permitirá
OBSERVACIONES Cadena de caracteres almacenar cualquier tipo de observación
sobre la sala
Tabla 13.3 Atributos de la entidad Salas
ENTIDAD ENTRADAS
Nombre de atributo Tipo de datos Descripción
NUM_ENTRADA Valor numérico que actuará de
Número entero
identificador de cada entrada
IDPROY Valor numérico que identifica la
Número entero
proyección correspondiente
FILA Número entero Número de fila de la entrada
NUM_ASIENTO Número entero Número de asiento de la entrada
NUM_CLIENTE Valor numérico que identifica al cliente
Número entero
que compra la entrada
315
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
13.4.1. INTRODUCCIÓN
SQL es un lenguaje de definición y manipulación de datos para bases de datos
relacionales. Es un lenguaje de definición porque permite definir la estructura de
las tablas que componen la base de datos, y de manipulación porque permite
efectuar consultas y realizar operaciones como inserción, borrado y actualización
de los datos que contiene.
—
— Gran capacidad expresiva.
— Flexibilidad.
— Sus sentencias permiten manejar conjuntos de registros.
— Tiene una estructura simple.
— Alta productividad en la codificación (con una sola sentencia pueden
efectuarse consultas complejas).
— SQL no es un lenguaje de programación (su código no necesita
compilarse).
316
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
El primer objeto a crear es la propia base de datos, para ello se utilizará el siguiente
comando:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Ejemplo 13.2:
Para crear la base de datos de la empresa Cinem@s que se utilizará a lo largo de los
próximos capítulos, la sentencia es la siguiente:
317
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Todo objeto creado con la sentencia CREATE puede ser modificado con la
sentencia ALTER o destruido con la sentencia DROP, de manera que, si se quisiera
destruir la bases de datos anterior, la sentencia a utilizar sería:
Creación de tablas
Una vez creada la base de datos, el paso siguiente es la creación de la estructura de
cada una de sus tablas.
donde:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
318
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Ejemplo 13.3:
El código SQL que crea la tabla de la base de datos Cinem@s correspondiente a la
entidad Clientes sería:
En el código anterior puede observarse cómo cada atributo tiene asociado un tipo
de dato; por ejemplo, el atributo NOMBRE será una cadena de un máximo de 40
caracteres (VARCHAR(40)), el atributo NUM_CLIENTE tendrá un valor numérico
de tipo entero en un rango pequeño (SMALLINT), o la fecha de nacimiento tendrá
un valor de tipo fecha (DATE). En el capítulo destinado al estudio del sistema
gestor MySQL se presentarán con detalle todos los tipos de datos admitidos.
319
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
atributo este tomará el valor por defecto. Tal como se aprecia en la definición de la
tabla CLIENTES, el único atributo que tiene valor por defecto es PUNTOS_ACUM,
siendo este valor 0; esto provoca que cuando se produzca el alta de un nuevo
cliente, su saldo de puntos acumulados sea 0, a no ser que se dé otro valor.
Ejemplo 13.4:
A continuación se incluye el código SQL completo de generación de todas las
tablas de la base de datos CINEMAS:
320
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Modificación de tablas
Una vez creada una tabla, es posible su modificación utilizando la sentencia
ALTER.
Ejemplo 13.5:
A continuación se incluyen algunos ejemplos de usos de la sentencia ALTER para
modificar la tabla CLIENTES:
321
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Creación de índices
Otro de los aspectos a considerar a la hora de construir las tablas de la base de
datos es la posibilidad de definir índices. Un índice es un archivo estructurado que
facilita el acceso a los datos en las operaciones de búsqueda. Los índices se deben
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
crear sobre aquellos atributos que suelen ser utilizados con frecuencia en las
búsquedas. Normalmente los sistemas gestores crean automáticamente un índice
sobre los atributos declarados como claves, y el programador puede optar por
añadir nuevos índices, pero siempre con precaución de no abusar de su uso, ya que
si se tienen demasiados índices la gestión de los datos se hace más costosa.
Los índices son creados, como cualquier elemento, con la sentencia CREATE,
aunque con una sintaxis diferente.
Ejemplo 13.6:
A continuación se incluyen dos ejemplos de creación de índices, uno sobre el
atributo FECHA de la tabla PROYECCIONES y otro sobre el atributo TITULO de
la tabla PELICULAS:
322
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
También es posible utilizar la sentencia ALTER para añadir un índice a una tabla
creada previamente; por ejemplo:
Ejemplo 13.7:
En la tabla de PROYECCIONES se incluyó un atributo (IDPELICULA) que hacía
referencia a otro atributo, en este caso del mismo nombre, de la tabla PELICULAS.
En principio, si no se definen claves ajenas podría darse la situación de existir una
proyección con un código de película inexistente en la tabla de películas, con la
correspondiente inconsistencia. La forma de evitar este problema es definir
precisamente en la tabla de proyecciones el correspondiente atributo como una
clave ajena que referencia a la tabla de películas. Como la tabla ya ha sido creada,
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Otra posibilidad es definir las claves ajenas de cada tabla de la misma manera en la
que se definen las claves primarias en la propia definición de la tabla.
Ejemplo 13.8:
La tabla de ENTRADAS podría haber sido definida incluyendo dos claves ajenas,
una referenciando a las proyecciones y otra a los clientes:
323
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.9:
Si una película es dada de baja en la tabla PELICULAS, entonces se deberían
eliminar de la tabla de PROYECCIONES todos aquellos registros que hacían
referencia a esa película. La forma en la que se indica esta necesidad de borrado en
cascada es:
En otros casos puede ser interesante que no se borren los registros relacionados y
que simplemente a los campos que han quedado con un valor no existente les sean
asignados el valor NULL, o incluso, que se queden con el valor inicial a pesar de su
inconsistencia. Para hacer esto, en la sentencia anterior debería cambiarse la
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
324
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
La sentencia INSERT permite añadir una o varias filas (registros) a una tabla. En
la práctica, para insertar datos en una base de datos se utilizan programas de
entrada orientados a formularios o rutinas que importan los datos desde ficheros o
documentos, realizando procesos iterativos de lectura de datos. Uno de los
objetivos finales que persigue este libro es poder realizar esas operaciones de
inserción desde una página web, para ello será preciso utilizar las sentencias SQL
en programas PHP que a su vez estarán integrados en documentos HTML.
Con esta sintaxis, deben ser introducidos tantos valores como atributos de la tabla;
además, los valores deben darse en el mismo orden en el que se encuentren
definidos los respectivos atributos. Por supuesto, los valores introducidos deben
coincidir con el tipo del correspondiente atributo.
SQL admite un valor especial, el valor NULL, que indica que el correspondiente
atributo está vacío en el registro insertado. Únicamente pueden utilizarse estos
valores nulos sobre atributos que no tengan en su declaración la cláusula NOT
NULL.
Debe aclararse también que las filas de una tabla no están ordenadas, por lo que no
es posible insertar una fila "al comienzo" o "al final" o "entre dos filas" de la tabla.
Ejemplo 13.10:
A continuación se muestran dos ejemplos de inserción de registros en la tabla
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Esta sentencia insertaría una nueva sala, cuyo número correspondería al 1, con
capacidad para 300 personas, distribuidas en 15 filas y se incluiría en el campo de
observaciones el hecho de tener una zona reservada para minusválidos.
325
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.11:
Se podría insertar un nuevo cliente en la tabla con la sentencia:
Como puede observarse, en este caso no se dan valores para todos los atributos de
la tabla. En concreto, el atributo NUM_CLIENTE al no tener valor y haber sido
declarado como autoincremental, tomará automáticamente como valor el número
siguiente al valor más alto que se encuentre almacenado en la columna
NUM_CLIENTE de la tabla hasta ese momento. El atributo PUNTOS_ACUM, al no
habérsele dado ningún valor y tener definido uno por defecto, tomará
automáticamente este último (0 en este caso). Al resto de atributos a los que no se
326
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Ejemplo 13.12:
Se incluye a continuación una sentencia que permitiría dar de alta una nueva sala:
Ejemplo 13.13:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
En este caso, el uso del signo "*" es una forma de indicar todos los atributos de la
tabla.
327
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Esta sentencia elimina de la tabla indicada todas las filas que cumplan la condición
señalada. Si se suprime la cláusula WHERE, se borrarán todas las filas de la tabla,
pero no la tabla; recuérdese que la instrucción que destruye completamente la tabla
(datos y estructura) es DROP TABLE.
Ejemplo 13.14:
Las sentencias de eliminación de registros serían:
⎯ Eliminación de las entradas de las primeras 5 filas para la proyección número 231:
Las sentencias DELETE con condiciones simples permiten seleccionar las filas a
suprimir basándose únicamente en los propios contenidos de las filas. Sin embargo,
también es posible efectuar la selección de las filas a suprimir en base a los datos
contenidos en otras tablas.
Ejemplo 13.15:
Si se desea eliminar todas las proyecciones de la película Refugio en el paraíso, se
podría utilizar la sentencia:
328
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
En una misma sentencia se pueden actualizar los valores de varios atributos, indicando las
asignaciones separadas por comas.
Ejemplo 13.16:
Sentencias de actualización de registros serían:
⎯ Otorgar 100 puntos extra a todos los clientes que tengan un saldo de puntos
acumulados menor que 500:
Ejemplo 13.17:
Se desea establecer tarifa reducida para todas las proyecciones de películas rodadas
antes de 1990, la sintaxis de la sentencia sería:
329
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Toda consulta en SQL se realiza con la sentencia SELECT. Esta es sin duda la
sentencia más poderosa y completa con la que cuenta el lenguaje SQL. Su sintaxis
completa es:
Todos los fragmentos que en esta sintaxis aparecen encerrados entre corchetes son
opcionales.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
330
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
— Cláusula FROM: en ella se indican, separadas por comas, las tablas que
contienen los datos que se desean recuperar en la consulta.
— Cláusula GROUP BY: permite obtener consultas resumen en las que todas
las filas similares son agrupadas y se genera una fila resumen para cada
grupo.
Ejemplo 13.18:
Si se quisiera recuperar todos los registros de la tabla PELICULAS, se debería
utilizar la sentencia:
331
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Una consulta SQL puede incluir columnas calculadas cuyos valores se obtienen a
partir de los valores de los datos almacenados.
Ejemplo 13.19:
Se desea listar las salas disminuyendo el aforo en un 10%, la sentencia para ello sería:
Eliminación de duplicados
Si una consulta incluye la clave primaria de una tabla en su lista de selección,
entonces cada fila de resultados será única; en cambio, si no se incluye la clave en
la lista de selección pueden aparecer filas duplicadas en el resultado. Se pueden
eliminar las filas duplicadas en la consulta insertando la palabra clave DISTINCT
en la sentencia SELECT justo antes de la lista de selección.
Ejemplo 13.20:
Al seleccionar todos los directores de las películas de la tabla PELICULAS pueden
aparecer algunos de ellos duplicados (los que han dirigido varias películas), por
tanto habría dos opciones para esta consulta:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
332
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Ejemplo 13.21:
Algunas consultas con condiciones de selección serían:
⎯ Obtener los títulos de todas las películas de una duración inferior a 120
minutos:
⎯ Generar un listado con los títulos y directores de todas las películas en las que
participe Antonio Banderas:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Como se puede apreciar en estos ejemplos, el lenguaje SQL tiene una sintaxis muy
similar al lenguaje natural, y ofrece una gran capacidad expresiva para generar
consultas.
333
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.22:
Se desea generar un listado de clientes en orden decreciente según el atributo de
puntos acumulados y en orden creciente según el nombre, la sentencia sería:
Consultas multitabla
SQL permite también recuperar datos procedentes de diferentes tablas mediante
una única sentencia SELECT, esto es lo que se conoce como "composición".
Ejemplo 13.23:
A continuación se presentan algunos sencillos ejemplos de consultas multitabla:
⎯ Se desea saber todas las fechas en las que se proyecta la película El Señor de
los Anillos:
⎯ Se desea un listado con los nombres de todos los clientes que hayan adquirido
alguna entrada para ver la película El Señor de los Anillos:
334
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Consultas resumen
SQL permite resumir los datos mediante un conjunto de funciones denominadas
funciones de columna. Algunas de ellas son:
Ejemplo 13.24:
A continuación se muestran ejemplos de consultas resumen:
⎯ Cálculo de la suma de los puntos acumulados por los clientes número 321, 543,
287 y 721:
335
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Consultas agrupadas
Las consultas agrupadas o resumen producen una única fila de resultados a modo
de "totales"; sin embargo, en ocasiones es interesante obtener resúmenes parciales
o agrupados por categorías. Esto se consigue con la cláusula GROUP BY.
Ejemplo 13.25:
Dos ejemplos de consultas agrupadas serían las siguientes:
Ejemplo 13.26:
Se desea obtener el nombre de todos los clientes que hayan adquirido 20 o más
entradas; la forma de conseguirlo sería utilizando la sentencia:
336
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
337
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR
DE BASES DE DATOS
MYSQL
MySQL ofrece varias ventajas respecto a otros sistemas gestores de bases de datos:
— Tiene licencia pública, permitiendo no solo la utilización del programa sino
también la consulta y modificación de su código fuente. Resulta por tanto fácil
de personalizar y adaptar a las necesidades concretas.
— El programa está desarrollado en C y C++, lo que facilita su integración en
otras aplicaciones desarrolladas igualmente en esos lenguajes.
— Puede ser descargado gratuitamente de Internet (http://www.mysql.com)
haciendo uso de su licencia GPL.
339
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
— Para aquellos que deseen que sus desarrollos basados en MySQL no sean
"código abierto" existe también una licencia comercial.
— MySQL utiliza el lenguaje SQL (Structured Query Languaje – Lenguaje de
Consulta Estructurado) que es el lenguaje de consulta más usado y
estandarizado para acceder a bases de datos relacionales. Soporta la sintaxis
estándar del lenguaje SQL para la realización de consultas de manipulación,
creación y de selección de datos.
— Es un sistema cliente/servidor, permitiendo trabajar como servidor
multiusuario y de subprocesamiento múltiple, es decir, cada vez que se
establece una conexión con el servidor, el programa servidor crea un
subproceso para manejar la solicitud del cliente, controlando el acceso
simultáneo de un gran número de usuarios a los datos y asegurando el acceso
solo a usuarios autorizados.
— MySQL dispone de un sistema sencillo de ayuda en línea, y de un monitor que
permite realizar todas las operaciones desde la línea de comandos del sistema,
sin necesitar ningún tipo de interfaze de usuario gráfica. Esto facilita la
administración remota del sistema utilizando telnet.
— Es portable, es decir, puede ser llevado a cualquier plataforma informática.
MySQL está disponible en más de veinte plataformas diferentes incluyendo las
distribuciones más usadas de Linux, sistema operativo Mac X, UNIX y
Microsoft Windows.
— Es posible encontrar gran cantidad de software desarrollado sobre MySQL o
que soporte MySQL. En concreto, son de destacar diferentes aplicaciones open
source para la administración de las bases de datos a través de un servidor web.
Todas estas características han hecho de MySQL uno de los sistemas gestores de
bases de datos más utilizado en la actualidad, no solo por pequeñas empresas sino
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
también por algunas grandes corporaciones, como puedan ser: Yahoo! Finance,
Google, CISCO, MP3.com, Motorola, NASA, Silicon Graphics, Texas
Instruments,... A mediados de 2004 se estimaba que existían más de 5 millones de
instalaciones activas del programa.
340
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
C:\mysql\bin> mysqld
C:\mysql\bin> mysqlshow
+-------------+
| Databases |
+-------------+
| mysql |
| test |
+-------------+
Por supuesto, una vez detenido el servidor no se podrá realizar ninguna operación
sobre las bases de datos.
341
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, para garantizar la seguridad y privacidad de las bases de datos una de
las primeras operaciones que debería hacerse es el establecimiento de contraseñas
para los usuarios, sobre todo para el usuario root, ya que al tener contraseña vacía
cualquier persona podría acceder con todos los privilegios. Igualmente, en el caso
de trabajar sobre Windows, se recomienda eliminar la cuenta de usuario invitado
con privilegios de superusuario.
342
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
C:\mysql\bin> mysql –p
si se desea acceder con la cuenta de usuario root. En cualquiera de los dos casos,
el sistema solicitaría la introducción del password, que cómo se ha comentado,
inicialmente es vacío.
Enter password:
Mysql>
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
343
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Figura 14.1 Arranque del servidor de MySQL desde la línea de comandos del sistema
mysql>
Cuando se desee salir del monitor de MySQL y regresar a la línea de comandos del
sistema, se tendría que ejecutar la sentencia:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
mysql> EXIT
o
mysql> QUIT
Dentro del monitor todas las sentencias SQL que se ejecuten deberán
finalizar con un signo de punto y coma, las sentencias pueden ocupar
varias líneas y el uso de letras mayúsculas o minúsculas es indiferente.
NOTA
Una vez dentro del monitor de MySQL, se pueden ejecutar directamente sentencias
SQL de manera interactiva.
344
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.1:
Como primera orden se podría solicitar un listado de las bases de datos disponibles:
Ejemplo 14.2:
También se podría ejecutar una sencilla consulta de selección para solicitar al
servidor que muestre la fecha actual y la versión de MySQL que se encuentra
instalada:
Ejemplo 14.3:
Es posible realizar sencillas operaciones matemáticas:
| COS(EXP(2/3)) | (3+5)*4 |
+---------------+---------+
| -0.368075 | 32 |
+---------------+---------+
1 row in set (0.11 sec)
Ejemplo 14.4:
También se puede solicitar que se muestre el usuario y la base de datos actual:
345
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Como se aprecia en esta última consulta, los usuarios quedan identificados por un
nombre formado por el nombre de usuario y la identificación del servidor desde el
que se conectan separados por el signo '@'. En el caso de que el servidor desde el
que se conecta sea el mismo que el servidor en el que se encuentra instalado
MySQL, esta identificación se limita al nombre localhost.
Ejemplo 14.5:
Si se desea usar la base de datos mysql (una de las dos bases de datos creadas por
defecto), la sentencia sería:
Una vez seleccionada la base de datos con la que se desea trabajar, todas las
operaciones posteriores irán dirigidas a ella, a no ser que explícitamente se seleccione
una nueva base de datos. Si se realiza de nuevo la selección de la base de datos actual
se podría apreciar cómo ahora sí que aparece el nombre de la correspondiente base de
datos
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
La base de datos mysql consta de 6 tablas. Entre ellas destaca la tabla user, en
la que se incluyen todos los usuarios registrados por el sistema. Esta tabla contiene
no solo la información sobre los nombres, contraseñas y servidores de los usuarios,
346
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
sino también un gran número de campos para establecer los diferentes privilegios
de cada usuario; por ejemplo, si los usuarios pueden crear nuevas bases de datos,
realizar operaciones de actualización, inserción, borrado,...
Ejemplo 14.6:
Si se desea consultar las tablas de la base de datos mysql se podría utilizar la
siguiente instrucción:
Cuando se desea ver una descripción completa de la estructura de una tabla puede
usarse la instrucción DESCRIBE o SHOW COLUMNS.
Ejemplo 14.7:
Para mostrar la estructura de la tabla user, se podría utilizar cualquiera de las dos
sentencias siguientes:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
De todos los atributos de la tabla user, los tres primeros (host, user y
password) identifican a cada usuario y los restantes establecen sus privilegios.
Por ejemplo, el atributo Insert_priv puede tomar el valor 'N' (no) o el valor
'Y' (yes), siendo el primero el valor por defecto, y determina si el usuario tiene o
347
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
348
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.8:
Si se desea obtener un listado con los nombres de usuario, contraseñas y servidores de
todos los usuarios registrados, se podría realizar una simple consulta de selección:
En este momento pueden observarse los cuatro usuarios definidos por defecto, los
dos superusuarios root y los dos usuarios invitados.
Ejemplo 14.9:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
349
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Sin embargo, se puede comprobar que si se sale del monitor (sentencia EXIT) y se
vuelve a entrar con usuario invitado (mysql –p), el sistema permitiría aún el
acceso. La razón es que para que los cambios de usuario tengan efecto, el servidor
MySQL debe reiniciarse. La forma de reiniciar el servidor es mediante la ejecución
del programa mysqladmin con la opción reload desde fuera del monitor
MySQL. A continuación se observa esta secuencia de operaciones:
mysql> exit
Bye
C:\mysql\bin>mysqladmin reload
C:\mysql\bin>mysql -p
Enter password:
ERROR 1045: Access denied for user: 'ODBC@localhost'
(Using password: NO)
C:\mysql\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22 to server version: 4.0.18-
nt
Como puede observarse, una vez eliminados los usuarios invitados y reiniciado el
servidor, la única posibilidad sería entrar con el usuario root.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Ejemplo 14.10:
Si se desea establecer como password la cadena 'miclave' para el usuario root
cuando se conecte desde el propio servidor local, la sentencia sería:
350
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
En este ultimo caso se está asignando la contraseña al mismo tiempo para los dos
usuarios root (el que se conecta desde el servidor local y el que lo hace desde
cualquier otro servidor).
Cuando se modifica directamente la tabla user, para que los cambios tengan
efecto inmediato, debe decirse al sistema que vuelva a leer todas las tablas de
privilegios, de otra manera, los cambios no tendrían efecto hasta que se reinicie el
servidor MySQL. Esto se realiza con la sentencia:
351
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Para que cualquier cambio relativo a usuarios y sus privilegios tenga efecto, es
necesario ejecutar la sentencia FLUSH PRIVILEGES o reiniciar el servidor
MySQL desde fuera del monitor. Esto último puede hacerse usando el programa
mysqladmin:
Una vez establecida la contraseña del usuario root, se debería entrar de nuevo en
el monitor con la sentencia:
En este caso la contraseña se indica a continuación del parámetro –p, sin dejar
ningún espacio entre ambos. Además si la contraseña contiene espacios en blanco o
caracteres especiales, esta debería darse entre comillas dobles.
352
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.11:
Con la sentencia:
se crea un nuevo usuario que se podrá conectar desde el propio servidor local, con
nombre de usuario operador y contraseña snoopy. Este usuario tendrá los
privilegios establecidos por defecto, estos privilegios solo le permiten el uso de la
tabla test.
C:\mysql\bin>mysql -u operador -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48 to server version: 4.0.18-
nt
+----------+
1 row in set (0.00 sec)
Ejemplo 14.12:
Si se desea crear un nuevo usuario que tenga permisos solo para seleccionar e
insertar nuevos registros y que pueda conectarse desde cualquier servidor, la
sentencia de inserción debería ser:
353
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Con estos privilegios el usuario mantenimiento podría ver los datos almacenados
en cualquier tabla de cualquier base de datos y podría insertar nuevos registros e
incluso crear nuevas tablas para insertar registros en ellos. Lo que no podría hacer
son operaciones de modificación de datos, eliminación de registros, creación de
nuevas bases de datos,...
Ejemplo 14.13:
Para ilustrar el proceso completo de creación de la base de datos se tomará como
referencia la base de datos de los multicines Cinem@s que ya fue diseñada en el
capítulo anterior. El primer paso, por supuesto, es arrancar el monitor MySQL con
un usuario que tenga los privilegios necesarios. En este caso se utilizará el
superusuario root:
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
C:\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48 to server version: 4.0.18-
nt
Una vez dentro, se debe crear la base de datos, utilizando para ello la sentencia
CREATE:
354
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Una vez creada, debe usarse la sentencia USE para seleccionarla como base de
datos activa.
Una vez creada la base de datos, lo siguiente es la creación de las tablas que la
compondrán. La creación de esas tablas se realiza con la correspondiente
instrucción SQL. Por ejemplo, una de las tablas de la base de datos de Cinem@s es
la que permitirá guardar la información de todos los clientes; en concreto, la
creación de esta tabla se haría de la siguiente manera:
355
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
atributos de la tabla. Con esta elección debe buscarse la optimización del espacio
de memoria y la eficiencia y rapidez en la consulta de los datos.
Los diferentes tipos de datos pueden ser clasificados en varios grupos o categorías:
numéricos, cadena de caracteres, fecha y hora, conjuntos y enumeraciones,...
Los tipos numéricos pueden, a su vez, ser de dos tipos: enteros y de coma flotante o
decimales. En ambos casos, existen diferentes opciones que permiten trabajar con
números en diferentes rangos.
356
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Tipos Enteros
Nombre Rango Almacenamiento Descripción
TINYINT -128 a 127 1 byte Entero pequeño
BIT 0o1 1 bit Entero 0 o 1
BOOL 0o1 1 bit Entero 0 o 1
SMALLINT -32768 a 32767 2 bytes Entero pequeño
MEDIUMINT -8388608 a 8388607 3 bytes Entero mediano
INT -2147483648 a 2147483647 4 bytes Entero normal
INTEGER -2147483648 a 2147483647 4 bytes Sinónimo de INT
BIGINT -9223372036854775808 a
8 bytes Entero grande
9223372036854775807
Tabla 14.2 Tipos de datos numéricos enteros
Como puede apreciarse en la Tabla 14.2, existen varias posibilidades para trabajar
con tipos enteros, la elección concreta dependerá de lo que realmente se
almacenará en ese argumento; por ejemplo, si se desea definir un argumento para
guardar edades de personas, no parecería muy lógico utilizar el tipo INTEGER por
el enorme desperdicio de espacio en memoria que implicaría.
almacenado; por ejemplo, el rango de valores del tipo TINYINT comprende todos
los números entre –128 y 127, en cambio, el rango de UNSIGNED TINYINT
variará entre 0 y 255.
Salvo en los tipos BIT y BOOL, en el resto de tipos de enteros se puede especificar
entre paréntesis el número máximo de dígitos con el que se mostrará el
correspondiente número. El valor máximo de este parámetro es 255.
357
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.14:
Si se define un atributo:
los números de las salas serán mostrados todos ellos con cuatro dígitos,
completando a la izquierda con ceros si fuese necesario.
PRECISION
REAL Sinónimos de double
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
358
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.15:
Si se define el atributo PRECIO de la siguiente manera:
En ambos casos, a la hora de definir un atributo con tipo CHAR o VARCHAR, debe
indicarse entre paréntesis la longitud máxima que admitirá. La longitud máxima
posible para esta cadena es, en cualquier caso, de 255 caracteres.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Ejemplo 14.16:
La forma de declarar un atributo NOMBRE para almacenar cadenas de longitud
variable de 20 caracteres como máximo sería:
NOMBRE VARCHAR(20)
359
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.17:
La declaración:
además almacenar cualquier tipo de fichero, como por ejemplo imágenes, sonidos,
documentos, programas,...
Existen diferentes variaciones de los tipos TEXT y BLOB que afectan únicamente a
las longitudes máximas de las cadenas que admiten. En la Tabla 14.4 se incluyen
estas versiones junto con los otros tipos de cadenas analizados.
360
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Longitud máxima
Nombre Almacenamiento Descripción
de caracteres
CHAR 1 1 bytes Un carácter.
Los tipos ENUM permiten definir atributos cuyos valores estén necesariamente en
una lista de valores predeterminados. A la hora de definir el atributo, los valores
deben ser dados entre paréntesis y separados por comas. El número máximo de
valores que admite MySQL es 65.535. Cuando se incorpore un nuevo registro a la
base de datos, para el valor del atributo de tipo ENUM se deberá elegir
necesariamente uno de los de la lista o utilizar el valor especial NULL.
361
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.18:
A continuación se definen dos atributos, uno de tipo ENUM y otro SET:
SESION ENUM('matinal','tarde','noche')
PROY SET('L','M','X','J','V','S','D')
Debe destacarse que los tipos ENUM y SET son visualizados como si
fuesen cadenas de caracteres, pero internamente son tratados y
almacenados como valores numéricos. Cada valor predeterminado tiene
asociado el valor numérico correspondiente a su posición en la lista que
define el atributo. El hecho de que estos tipos de datos sean tratados
NOTA como números hace que su tratamiento sea mucho más rápido y eficaz
que el de las cadenas de caracteres.
Ejemplo 14.19:
Para MySQL cualquiera de las cadenas siguientes correspondería a la misma fecha:
el 31 de marzo de 1997:
'1997/3/31'
'1997-3-31'
19970331
Respecto a las horas, necesariamente debe usarse el signo ':' como separador o
bien indicar los dígitos correspondientes a las horas, minutos y segundos seguidos,
sin ningún separador. Por ejemplo, las 17 horas 5 minutos y 20 segundos se puede
expresar como:
'17:5:20'
170520
362
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Tamaño de
Nombre Rango Descripción
almacenamiento
1000-01-01 Almacena una fecha con el
DATE 3 bytes
9999-12-31 formato YYYY-MM-DD
3 bytes
-838:59:59 Almacena una hora con el
TIME
838:59:59 formato HH:MM:SS
8 bytes
1000-01-01 00:00:00 Almacena una fecha y una hora
DATETIME con el formato
9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
El formato en el que son almacenados los instantes de tiempo depende del valor del
parámetro que se haya colocado entre paréntesis en la definición del
correspondiente atributo. La Tabla 14.6 muestra los diferentes formatos asociados a
los diferentes parámetros.
363
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
TIMESTAMP(14) AAAAMMDDHHMMSS
TIMESTAMP(12) AAMMDDHHMMSS
TIMESTAMP(8) AAAAMMDD
TIMESTAMP(6) AAMMDD
TIMESTAMP(4) AAMM
TIMESTAMP(2) AA
364
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Para trabajar con claves foráneas es necesario que las dos tablas relacionadas sean
ambas definidas del tipo InnoDB, para ello se colocará al final de la tabla la
cláusula:
TYPE = INNODB
365
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
para indicar el campo de la tabla primaria que se encuentra asociado con la clave
de la tabla relacionada. Por supuesto, ambos campos relacionados deben tener
asociado el mismo tipo de datos.
Ejemplo 14.20:
A continuación se muestra el código completo de creación de la base de datos
Cinem@s haciendo uso de la integridad referencial:
CARTELERA BLOB ,
PRIMARY KEY (IDPELICULA)) TYPE = INNODB;
366
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
EMAIL CHAR(30) ,
PUNTOS_ACUM SMALLINT NOT NULL DEFAULT 0 ,
CLAVE CHAR(6) NOT NULL ,
PRIMARY KEY (NUM_CLIENTE)) TYPE = INNODB;
INDEX (NUM_CLIENTE),
FOREIGN KEY (NUM_CLIENTE) REFERENCES CLIENTES
(NUM_CLIENTE)
) TYPE = INNODB;
Como puede observarse, todas las tablas han sido definidas del tipo InnoDB, y en
las tablas PROYECCIONES y ENTRADAS se definen dos claves foráneas en cada
una con sus respectivos índices.
Otra posibilidad para crear la base de datos con las restricciones de integridad
referencial es añadir las claves foráneas y los índices después de crear todas las
tablas haciendo uso en este caso de la sentencia ALTER TABLE. El código
completo correspondiente a esta alternativa se muestra a continuación:
367
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
USE CINEMAS;
FECHANAC DATE ,
TELEF CHAR(9) ,
EMAIL CHAR(30) ,
PUNTOS_ACUM SMALLINT NOT NULL DEFAULT 0 ,
CLAVE CHAR(6) NOT NULL ,
PRIMARY KEY (NUM_CLIENTE)) TYPE = INNODB;
368
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.21:
Suponiendo que el fichero con las instrucciones de creación de las tablas se llama
cinemas.sql y que se encuentra en el directorio raíz, la creación de la base de
datos se podría hacer de la manera siguiente:
369
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Por ejemplo, estos mensajes aparecerían si se tratan de crear las claves foráneas sin
crear los correspondientes índices.
Si no se produce ningún error, se puede comprobar que las cinco tablas de la base
de datos habrán sido generadas correctamente:
| clientes |
| entradas |
| peliculas |
| proyecciones |
| salas |
+-------------------+
5 rows in set (0.00 sec)
Cuando se crea una tabla con una clave foránea MySQL asigna internamente un ID
que hará referencia a la restricción que establece sobre la tabla. Para conocer estos
ID se puede utilizar la instrucción SHOW CREATE TABLE.
370
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
+--------------+--------------------------------------------------------+
+--------------+--------------------------------------------------------+
| | CONSTRAINT `proyecciones_ibfk_2` |
| | CONSTRAINT `proyecciones_ibfk_1` |
| | ) TYPE=InnoDB |
+--------------+--------------------------------------------------------+
371
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
por ejemplo para eliminar la correspondiente clave foránea con la sentencia ALTER
TABLE. Por ejemplo, si se quisiese suprimir la clave foránea NUM_SALA se podría
ejecutar la sentencia:
Ejemplo 14.22:
En primer lugar se insertará una película y dos salas en las respectivas tablas:
Una vez incluida la película, cuyo identificador es 1, y las salas, con identificadores
1 y 2 respectivamente, es posible, por ejemplo, dar de alta una nueva proyección de
la película 1 en la sala 2 para las 16:30 del día 16 de mayo de 2004; esta
proyección tendrá como identificador el número 1:
En cambio, si se trata de insertar una nueva proyección que referencie a una sala
inexistente (sala 3) o una película inexistente (película 50), se produce una
violación de las restricciones de integridad referencial, MySQL detecta esa
violación, no incluye el registro y muestra un mensaje de error.
372
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.23:
MySQL no permitiría borrar la película 1 ni la sala 2 porque existen
proyecciones relacionadas que quedarían huérfanas en caso de producirse el
borrado. En cambio sí es posible borrar la sala 1 ya que no tiene ninguna
proyección relacionada.
373
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.24:
Si se quisiera que los procesos de borrado se produjeran en cascada en la tabla de
proyecciones, lo primero que se debería hacer es modificar la definición de sus dos
374
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
De esta forma, a partir de ahora cada vez que se suprima una película o una sala,
automáticamente se eliminarán todas las proyecciones de esa película o que tengan
lugar en esa sala.
375
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Con tres sencillas consultas de selección se podría consultar el contenido de las tres
tablas en este momento.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
376
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Por ejemplo, se desea eliminar la película Piratas del Caribe (cuyo identificador es
10); la sentencia sería:
377
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
378
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.25:
mysql> ALTER TABLE PROYECCIONES
-> DROP FOREIGN KEY proyecciones_ibfk_4;
Query OK, 1 row affected (0.30 sec)
Records: 1 Duplicates: 0 Warnings: 0
379
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.26:
A continuación se muestra el funcionamiento de la actualización en cascada. En
primer lugar se puede observar que la tabla SALAS incluye dos registros, uno de
los cuales (el correspondiente a la sala 1) se encuentra relacionado con un registro
de la tabla PROYECCIONES:
380
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
381
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.27:
Supóngase que se dispone de un fichero de texto que contiene la siguiente
información:
1 Luis López Floranes 54, Santander 1970-3-31 942221133 llopez@coldmail.com 0 llp70
2 María Anta San Juan 22, Oviedo 1981-11-22 686776612 manta@tumail.com 0 as23b
3 Ana Palacios San Andrés 39, Madrid 1968-5-1 null apm55@tumail.com 0 aaa45b
4 Valeria Vázquez Moro 120, Almería 1990-2-13 645162377 vv90@coldmail.com 0 basw25
Como puede apreciarse, cada una de las líneas del fichero contiene los datos
correspondientes a un registro de la tabla CLIENTES, coincidiendo en número y
tipo los respectivos datos con los atributos de esa tabla, y estando separados los
datos por tabuladores.
Una vez disponible el fichero anterior, desde la línea de comandos del sistema (no
desde dentro del monitor de MySQL) se haría una llamada a la utilidad
mysqlimport indicando, por este orden, el nombre de usuario para conectarse al
servidor, el parámetro para solicitar la contraseña, el nombre de la base de datos de
destino y el nombre y ruta del archivo de texto:
Entrando al monitor de MySQL se observa que los datos han sido correctamente
importados.
C:\mysql\bin>mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 97 to server version: 4.0.18-
nt
382
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Otra alternativa para importar datos que se encuentren en ficheros de texto es el uso
del comando LOAD DATA INFILE del monitor de MySQL. Para poder hacer uso
de este comando, a diferencia del caso anterior, se debe estar ya dentro del monitor
de MySQL, e incluso es posible su uso desde aplicaciones programadas al efecto.
383
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.28:
Supóngase que se desea incluir en la tabla SALAS los 7 registros que se
encuentran en un fichero de texto llamado relacionsalas.txt y cuyo
contenido es:
El parámetro opcional REPLACE indica que en caso de que ya existan registros con
la misma clave en la tabla destino, estos deben ser reemplazados. De igual manera,
se utiliza otro parámetro opcional (FIELDS TERMINATED BY) para indicar el
separador de campos.
Con una consulta SELECT se puede comprobar que los datos han sido
correctamente importados:
384
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Al igual que resulta interesante disponer de mecanismos para importar los datos, no
menos interesante resulta poder generar ficheros de texto con los datos de las tablas
o resultados de consultas con objeto de ser exportados a otras aplicaciones.
385
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
La generación de este fichero debe hacerse desde la línea de comandos del sistema,
utilizando la sintaxis siguiente:
Si después del nombre de la base de datos se indica el nombre de una de sus tablas,
el fichero generado únicamente contendrá la definición de esa tabla y las sentencias
de inserción de sus registros.
Ejemplo 14.29:
Se puede generar un fichero de respaldo de la tabla clientes de la siguiente manera:
Ejemplo 14.30:
mysql> USE CINEMAS;
Database changed
Con esta instrucción se generaría un fichero de texto con los nombres y puntos
acumulados de todos los clientes, siendo el contenido del fichero el siguiente:
386
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.31:
También es posible indicar una condición de selección de registros, en este caso se
obtienen los nombres de todos los clientes de Santander:
387
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN:
ADMINISTRACIÓN DE
BASES DE DATOS
MYSQL DESDE LA
WEB
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
15.1. INTRODUCCIÓN
La administración y gestión de las bases de datos de MySQL mediante el propio
monitor de MySQL resulta en ocasiones un tanto laboriosa, especialmente para
aquellos usuarios acostumbrados al uso de herramientas con interfaz gráfica de usuario.
389
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, para poder hacer uso de esta aplicación de administración de MySQL
es necesario disponer de un servidor web con un intérprete de PHP, ya que todas las
páginas están escritas en ese lenguaje. Además es preciso establecer los valores de
diferentes parámetros de configuración que se encuentran dentro del fichero
config.inc.php alojado en el directorio que contiene todas las páginas que
componen la aplicación. Dos de estos parámetros serían PmaAbsoluteUri, que
permite indicar el URL que identifica la localización exacta de la aplicación, y
auth_type, que permite indicar el tipo de autentificación que se utilizará (existen
tres opciones: autentificación basada en cookies, basada en http o inclusión en el
fichero de configuración de los datos de usuario).
En el caso de tener instalado el servidor web sobre el propio equipo (localhost) que
se utilizará para la administración, se deberá escribir en la barra de direcciones del
navegador:
http://localhost/phpmyadmin/
Para ello es necesario también que el servidor web tenga configuradas las páginas
index.php como páginas de inicio de directorio.
390
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
391
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
392
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
Una vez seleccionada una base de datos en esta lista, el marco de la derecha de
la ventana mostrará la estructura de dicha base de datos. Por ejemplo, al
seleccionar la base de datos de Cinem@s, la ventana del navegador tendrá el
aspecto que muestra la Figura 15.3.
Mediante los enlaces gráficos que aparecen delante de cada registro se podrán
editar sus campos o borrar el registro completamente. Además, pulsando sobre los
nombres de los campos que aparecen en las cabeceras de las columnas se puede
variar el orden en el que se muestran los registros (orden ascendente o descendente
sobre ese campo).
393
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
394
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
395
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
En la parte inferior del formulario existen dos botones de opción que permiten
especificar si se desea añadir un nuevo registro o simplemente volver a la
estructura de la base de datos.
396
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
Además, para el caso de campos de tipo blob, preparados para recibir cualquier
tipo de archivo, el formulario permite directamente examinar el contenido del
equipo y seleccionar el archivo a almacenar en la tabla. Este es el caso del campo
CARTELERA de la tabla de PELICULAS (Figura 15.12).
397
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
La siguiente acción que se puede realizar sobre las tablas es la de ver sus
propiedades. En este caso se mostrará la estructura de la tabla, con los nombres y
tipos de sus argumentos, así como cualquier otra propiedad de la misma establecida
en tiempo de diseño (claves primarias, atributos no nulos, valores predeterminados,
índices,...). A través de esta opción no solo es posible consultar las propiedades de
la tabla sino también modificarlas. La próxima sección mostrará detalladamente las
distintas opciones accesibles desde la página de propiedades.
Finalmente, las dos últimas acciones a realizar sobre las tablas son las de eliminar
y vaciar. La eliminación borra la tabla completa (sentencia DROP TABLE),
mientras que el vaciado únicamente borra los registros que contiene la tabla pero la
mantiene vacía en la base de datos (sentencia TRUNCATE).
Cuando se trabaja en MySQL con tablas que soporten la integridad referencial, las
operaciones de eliminación de tabla o de vaciado de registros solo son permitidas
cuando no se estén utilizando en otras tablas vinculadas.
398
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
Para analizar la estructura de una de las tablas se puede pulsar sobre el enlace
correspondiente que aparece en el marco izquierdo de la página principal (Figura
15.14).
Al hacerlo, se accede a una página similar a la que aparece cuando se consultan las
propiedades de una tabla. En la parte superior de esa misma página aparecen una
serie de enlaces adicionales que permiten realizar todo tipo de acciones sobre la
tabla: examinar sus registros, ejecutar sentencias SQL, generar consultas de
selección, insertar nuevos registros, exportar datos, cambiar el nombre de la tabla,
cambiar su ubicación,... Algunas de estas acciones pueden realizarse también a
través de la página que muestra la estructura completa de la base de datos.
Al seleccionar una tabla, la página muestra por defecto sus propiedades, tal como
se ve en la Figura 15.15, para el caso de la tabla CLIENTES.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
399
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
400
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
botón Crear se accede a una nueva página (Figura 15.18) en la que se crearán las
diferentes tablas. En este caso se está creando una nueva base de datos de nombre
recursos_humanos cuyo objetivo podría ser mantener información sobre los
trabajadores de la empresa Cinem@s, turnos de trabajo, horas extraordinarias,... Al
crear la base de datos, la página muestra también la sentencia SQL correspondiente
e incluye un simple formulario para crear las diferentes tablas de la nueva base de
datos.
401
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
El siguiente paso, será definir los 7 campos de la tabla; para ello phpmyadmin
muestra un nuevo formulario en el que este proceso se realiza de forma intuitiva
(Figura 15.20). El formulario permite indicar los nombres de los campos, sus tipos,
402
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
403
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Para importar todos esos datos a la tabla de empleados se tendría que pulsar sobre
el enlace Insertar archivo de texto en la tabla que aparece al final de la página que
muestra la estructura de la correspondiente tabla. Al hacerlo se accede al
formulario que muestra la Figura 15.22, en él se debe especificar el fichero fuente
de los datos y los diferentes caracteres que actuarán de separadores de campos y de
registros.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
404
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
Para exportar una base de datos debe activarse el enlace Exportar que aparece en la
página de inicio de phpmyadmin. Al hacerlo se accede a una nueva página en la
que en primer lugar habría que seleccionar la o las bases de datos que se desean
exportar y el formato de exportación (Figura 15.24).
405
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
— CSV para Excel: se generaría un fichero de texto con los contenidos de las
tablas de la base de datos en formato CSV (valores separados por comas). Este
formato puede ser leído directamente por Excel para mostrar los contenidos de
las tablas en una hoja de cálculo.
— Datos CSV: exporta los datos de las tablas a formato CSV, pero en este caso se
permite que el usuario elija los caracteres delimitadores de campo y de registro,
los caracteres de fin de línea y los valores a utilizar para reemplazar los valores
nulos.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
406
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
407
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
concreta, una tabla, o incluso una sola columna de una tabla, estos privilegios
quedan reflejados en sendos registros de las tablas: db, tables_priv y columns_priv.
408
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
409
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Lo primera será indicar sobre qué base de datos el usuario tendrá privilegios
específicos, para ello en la página aparece una lista con todas las bases de datos
disponibles. Al elegir la base de datos cinemas o escribir su nombre en el campo
que acompaña a la lista y pulsar Continúe, se accederá a una nueva página (Figura
15.29). En esta nueva página se pueden señalar los privilegios específicos sobre la
base de datos cinemas; como puede apreciarse se han señalado todos los
privilegios. Una vez señalados, bastaría pulsar el botón Continúe para que esos
privilegios queden registrados.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
410
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHPMYADMIN: ADMINISTRACIÓN DE BASES DE DATOS MYSQL DESDE LA WEB
Lo primero será crear el nuevo usuario sin asignarle ningún privilegio global. El
proceso es idéntico al realizado con el usuario anterior. A continuación, de nuevo,
se señalará que se desea definir privilegios específicos para la base de datos
cinemas, en el formulario correspondiente, no se señalará ningún privilegio
específico para la base de datos y se indicará la tabla sobre la que sí se desean
definir privilegios, tal como puede verse en la Figura 15.30.
Tras señalar la tabla PELICULAS, se accede a una nueva página (Figura 15.31) en
la que es posible indicar las acciones que el usuario podrá realizar sobre las
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
diferentes tablas e incluso sobre los diferentes campos de cada tabla. En el caso
anterior se está indicando que el usuario podrá efectuar operaciones de selección,
inserción, actualización y borrado sobre todos los campos de la tabla de películas.
Pulsando el botón Continúe estos privilegios quedarán registrados en la base de
datos mysql.
411
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
PHP Y MYSQL. TECNOLOGÍAS PARA EL DESARROLLO DE APLICACIONES WEB
Para que todos los cambios realizados sobre los usuarios tengan efecto
sobre MySQL, suele ser conveniente reiniciar el servidor de MySQL. Para
NOTA realizar esta acción, en la página de inicio de phpmyadmin hay un enlace:
Reinicio de MySQL.
Tras todos los procesos realizados, en la tabla user de la base de datos mysql habrá
dos nuevos registros correspondientes a los dos nuevos usuarios; en la tabla db
aparecerá un nuevo registro en el que se indica que el usuario cinemasadmin tiene
todos los privilegios sobre la base de datos cinemas; y finalmente, en la tables_priv
habrá un nuevo registro en el que se indican los privilegios del usuario
películas_op sobre la tabla películas de la base de datos cinemas.
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
412
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.
CONECTIVIDAD A
BASES DE DATOS
MYSQL DESDE PHP
16.1. INTRODUCCIÓN
Copyright © 2005. Ediciones Díaz de Santos. All rights reserved.
Al igual que en los capítulos precedentes, el objetivo no será una mera descripción
de las diferentes funciones de conexión y de sus sintaxis; más bien se tratará de
mostrar su funcionamiento a través de sencillos ejemplos tomando como referencia
el sitio web Cinem@s que se viene desarrollando a lo largo del libro. Usando PHP
413
Cobo, Á., Gómez, P., & Pérez, D. (2005). Php y mysql : Tecnologías para el desarrollo de aplicaciones web. Retrieved from http://ebookcentral.proquest.com
Created from unadsp on 2019-09-13 11:30:05.