Download Tema 8. Bases de datos(I)

Document related concepts

PhpMyAdmin wikipedia , lookup

Mecanismos de almacenamiento (MySQL) wikipedia , lookup

SQL wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

MySQL wikipedia , lookup

Transcript
Desarrollo Web en Entorno Servidor
Tema 8: Bases de datos (I).
1.
Bases de datos en la Web. Acceso a bases de datos desde PHP
2.
MySQL. Administracion con phpmyadmin.
3.
Conexión con el servidor de base de datos.
4.
Selección de base de datos.
5.
Crear una base de datos.
6.
Borrar una base de datos.
7.
Crear Tablas.
8.
Lectura de resultados de sentencias Mysql.
9.
Otras funciones informativas.
1
1.Bases de datos en la Web


Las bases de datos permiten almacenar de una forma
estructurada y eficiente toda la información de un sitio
web
Ventajas





Proporcionar información actualizada
Facilitar la realización de búsquedas
Disminuir los costes de mantenimiento
Implementar sistemas de control de acceso
Almacenar preferencias de los usuarios
2
1.Bases de datos en la Web

Esquema básico de un sitio web soportado por bases de
datos:
3
1.- Acceso a bases de datos desde PHP.
Una de las aplicaciones más frecuentes de PHP es generar un interface web para acceder y gestionar
la información almacenada en una base de datos. Usando PHP podemos mostrar en una página web
información extraída de la base de datos, o enviar sentencias al gestor de la base de datos para que
elimine o actualice algunos registros.

PHP soporta más de 15 sistemas gestores de bases de datos: SQLite, Oracle, SQL Server, PostgreSQL,
IBM DB2, MySQL, etc. Hasta la versión 5 de PHP, el acceso a las bases de datos se hacía
principalmente utilizando extensiones específicas para cada sistema gestor de base de datos
(extensiones nativas). Es decir, que si queríamos acceder a una base de datos de PostgreSQL,
deberíamos instalar y utilizar la extensión de ese gestor en concreto. Las funciones y objetos a utilizar
eran distintos para cada extensión.

A partir de la versión 5 de PHP se introdujo en el lenguaje una extensión para acceder de una forma
común a distintos sistemas gestores: PDO. La gran ventaja de PDO está clara: podemos seguir
utilizando una misma sintaxis aunque cambiemos el motor de nuestra base de datos. Por el
contrario, en algunas ocasiones preferiremos seguir usando extensiones nativas en nuestros
programas. Mientras PDO ofrece un conjunto común de funciones, las extensiones nativas
normalmente ofrecen más potencia (acceso a funciones específicas de cada gestor de base de datos)
y en algunos casos también mayor velocidad.

De los distintos SGBD existentes, vas a aprender a utilizar MySQL. MySQL es un gestor de bases de
datos relacionales de código abierto bajo licencia GNU GPL. Es el gestor de bases de datos más
empleado con el lenguaje PHP. Como ya vimos, es la letra "M" que figura en los acrónimos AMP y
XAMPP.

4
MySQL



MySQL es un sistema gestor de bases de datos (SGBD) relacionales. Es un programa de código
abierto que se ofrece bajo licencia GNU GPL, aunque también ofrece una licencia comercial en caso
de que quieras utilizarlo para desarrollar aplicaciones de código propietario. En las últimas versiones
(a partir de la 5.1), se ofrecen, de hecho, varios productos distintos: uno de código libre
(Community Edition), y otro u otros comerciales (Standard Edition, Enterprise Edition).
Incorpora múltiples motores de almacenamiento, cada uno con características propias: unos son
más veloces, otros, aportan mayor seguridad o mejores capacidades de búsqueda. Cuando crees
una base de datos, puedes elegir el motor en función de las características propias de la aplicación.
Si no lo cambias, el motor que se utiliza por defecto se llama MyISAM, que es muy rápido pero a
cambio no contempla integridad referencial ni tablas transaccionales . El motor InnoDB es un poco
más lento pero sí soporta tanto integridad referencial como tablas transaccionales.
MySQL se emplea en múltiples aplicaciones web, ligado en la mayor parte de los casos al
lenguaje PHP y al servidor web Apache. Utiliza SQL para la gestión, consulta y modificación de la
información almacenada. Soporta la mayor parte de las características de ANSI SQL 99 (revisión del
estándar ANSI SQL del año 1999, que agrega a la revisión anterior (SQL2 o SQL 92) disparadores,
expresiones regulares, y algunas características de orientación a objetos), y añade además algunas

extensiones propias.
En este primer tema dedicado a las bases de datos vamos a trabajar con la extensión nativa
MySQL, dada la gran cantidad de aplicaciones hechas usando esta extensión.
5
MySQL


Características de MySQL

Modelo relacional, multiusuario
Tipos de datos

Numéricos



Fecha y hora


date, time, datetime, year, timestamp
Cadena





tinyint, smallint, mediumint, int, integer, bigint
decimal, float, numeric
char, varchar
tinytext, text, mediumtext, longtext
tinyblob, blob, mediumblob, longblob
enum, set
Debe elegirse adecuadamente el tipo y el tamaño de cada
campo
6
MySQL

Operadores

Aritméticos


Comparación


Lógicos


Funciones





+, -, *, /
=, !=, <=, <, >=, >, IS NULL, IS NOT NULL
not (!), and (&&), or (||), xor
Funciones
Funciones
Funciones
Funciones
Funciones
de cadena
de comparación de cadenas
numéricas
de fecha y hora
de agregado
7
Herramientas de administración:
phpMyAdmin



phpMyAdmin es una herramienta para la administración del
servidor de bases de datos MySQL
Dispone de una interfaz gráfica y es de libre distribución
Permite realizar todo tipo de operaciones sobre bases de datos:









crear, borrar y modificar tablas
consultar, insertar, modificar y eliminar datos
definir usuarios y asignar permisos
realizar copias de seguridad
etc
Está escrita en php y se ejecuta desde el navegador
Si está instalada en la carpeta phpmyadmin, se ejecuta escribiendo
en la barra de direcciones del navegador la url
http://localhost/phpmyadmin/
Puede administrar bases de datos locales y remotas
8
phpMyadmin
9
Funciones de PHP para el acceso a bases de
datos MySQL

Los pasos para acceder desde PHP a una base de
datos son los siguientes:
 Conectar con el servidor de bases de datos
 Seleccionar una base de datos
 Enviar la instrucción SQL a la base de datos
 Obtener y procesar los resultados
 Cerrar la conexión con el servidor de bases
de datos
10
Acceso a bases de datos MySQL

Las funciones concretas de MySQL que realizan estas
operaciones son:

Conectar con el servidor de bases de datos:


Seleccionar una base de datos:


mysql_query()
Obtener y procesar los resultados:


mysql_select_db()
Enviar la instrucción SQL a la base de datos:


mysql_connect()
mysql_num_rows() y mysql_fetch_array()
Cerrar la conexión con el servidor de bases de datos:

mysql_close()
11
Acceso a bases de datos MySQL


Conectar con el servidor de bases de datos: mysql_connect()

Devuelve un identificador de la conexión en caso de éxito y false en caso
contrario
Sintaxis:
$conexion = mysql_connect (servidor, username, password);

Ejemplo:
$conexion = mysql_connect ("localhost", "cursophp", "")
or die ("No se puede conectar con el servidor");

Cerrar la conexión con base de datos: mysql_close()

Ejemplos:
<?php
$c=mysql_connect("localhost", "root","");
mysql_close($c);
?>
12
Conexión con el servidor de la Base de datos.
En el siguiente ejemplo se controla si se ha podido realizar la
conexión utilizando el valor devuelto por mysql_connect()
<?php
$c=mysql_connect ("localhost", "root","");
if ($c)
Fichero: conexion1.php
echo 'Conectado satisfactoriamente';
else
echo 'No pudo conectarse: ' ;
mysql_close($c);
# echo 'Se ha cerrado la conexión con el servidor de bases de datos';
?>
En este ejemplo se utiliza la instrucción OR DIE
<?php
$c=mysql_connect("localhost", "root","") or die("No se conecto");
if(mysql_close($c)){
print "<br>Se ha cerrado la conexión con el servidor de bases de
datos<BR>";
}
?>
13
Evitar el mensaje de error



La utilización de or die es una opción alternativa a exit() que, interrumpe la
ejecución de un script en el momento de ser ejecutada.
Cuando se produce un error en la ejecución de un script –no poder establecer conexión
con MySQL, por ejemplo– no tiene sentido seguir ejecutándolo. Lo razonable será
interrumpir el proceso y advertir del error.
Si añadimos a la instrucción $c=mysql_conect('h','u','p') (sin paréntesis, ni comas, ni
punto y coma, sólo separado por un espacio):
or die ('mensaje') ponemos el punto y coma de fin de instrucción después de cerrar
este último paréntesis, en el caso de que se produzca un error se interrumpirá la
ejecución del script y aparecerá en la ventana del navegador el texto incluido en
mensaje.
Al ejecutar el script anterior se produce un error (la contraseña es incorrecta). Pero si
lo ejecutas verás que aparece un mensaje de error generado por PHP.
Este tipo de mensajes pueden deshabilitarse haciendo una modificación en php.ini.
Pero hay una técnica mucho más fácil. Bastará con insertar delante de la función una
arroba (@) para evitar que aparezcan. En el
se ha
Fichero:
conexion3.php
incorporado esta técnica.
14
Conexión con el servidor de la Base de datos.
Listar Base de datos existentes:

Antes de crear y/o borrar una base de datos puede ser conveniente y útil comprobar si
ya existe.

Todas ellas requieren que se haya establecido una conexión con el servidor.
$p=mysql_query(‘SHOW DATABASES’);
Consulta para obtener las bases de datos existentes en el servidor.
$n=mysql_num_rows($p)
Esta función devuelve el número de bases de datos existentes en el servidor. Utiliza como
parámetro ($p) el resultado obtenido mediante la función anterior. Ese número puede
recogerse en una variable (en este caso $n).
mysql_db_name($p, i)
Esta nueva función devuelve el nombre de una de las bases de datos, identificada por un
número i que debe pertenecer al intervalo [0,$n).
Script ejemplo:
Fichero: conexion2.php
15
Selección de una base de datos.
Dado que podemos manejar bases de datos distintas es preciso
decir a MySQL con qué base queremos trabajar.
mysql_select_db("n", $c);
Devuelve true en caso de éxito y false en caso contrario
donde n es el nombre de la base de datos (puede ser una
cadena entrecomillada o el nombre de una variable previa).
Este valor debe insertarse siempre. La razón es que MySQL
permite mantener abiertas, de forma simultánea, varias
conexiones (podríamos manejar más de un servidor de bases de
datos) y en esas condiciones sería necesaria una conexión
distinta para cada servidor.
16
Acceso a bases de datos MySQL

Enviar la instrucción SQL a la base de datos:
mysql_query()


Devuelve un identificador o true (dependiendo de la
instrucción) si la instrucción se ejecuta correctamente y
false en caso contrario
Sintaxis:
$consulta = mysql_query (instrucción, $conexion);

Ejemplo:
$consulta = mysql_query ("select * from noticias", $conexion)
or die ("Fallo en la consulta");
17
Crear una base de datos.
La creación de una base de datos también requiere una
conexión previa y utiliza la siguiente sintaxis:
mysql_query ("CREATE DATABASE nom")
donde nom es el nombre de una nueva base de datos.


Esta función devuelve TRUE si la base de datos es creada, y
FALSE si no es posible hacerlo.
Si intentamos crear una base de datos con un nombre ya
existente la función nos devolverá FALSE.
18
Ejemplo
<?php
if($conexion=mysql_connect ("localhost","root",""))
{
echo "<h2> Conexión establecida con el servidor</h2><br>";
$sql = 'CREATE DATABASE midb';
if (mysql_query($sql, $conexion))
{echo "<h2> Base de datos creada</h2><br>"; }
else
{echo "<h2> No ha sido posible crear la base de datos</h2><br>";}
if(mysql_close($conexion))
{echo "<h2> Conexión cerrada con exito</h2><br>";
echo "El identificador de conexion es:",$conexion;}
else
{echo "<h2> No se ha cerrado la conexión</h2>";}
}
else
{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
Fichero: creacionbd1.php
19
Borrar una base de datos.
Para borrar una base de datos se requiere el uso de la siguiente
función PHP:
mysql_query ("DROP DATABASE nom")
donde nom es el nombre de la base de datos y debiendo
ponerse toda la cadena del paréntesis entre comillas.

Esta función devuelve TRUE cuando se ejecuta con éxito, y
FALSE en el caso contrario.
20
Ejemplo
<?php
if($c=mysql_connect ("localhost","root",""))
{
echo "<h2> Conexión establecida con el servidor</h2><br>";
if(mysql_query ("DROP DATABASE midb",$c))
{
echo "<h2> Base de datos borrada</h2><br>";
}
else
{
echo
"<h2> No ha sido posible BORRAR la base de datos</h2> <br>";
}
if(mysql_close($c)){
echo "<h2> Conexión cerrada con exito</h2><br>";}
else{
echo "<h2> No se ha cerrado la conexión</h2>";
}
}
else
{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
Fichero: borrarbd1.php
21
Acceso a bases de datos MySQL.
Ejectuar crearbd.php e importar a la bd creada:noticias.sql

Seleccionar una base de datos: mysql_select_db()


Devuelve true en caso de éxito y false en caso contrario
Sintaxis:
mysql_select_db (database);

Ejemplo:

mysql_select_db ("ejemplos")
or die ("No se puede seleccionar la base de datos");
Enviar la instrucción SQL a la base de datos: mysql_query()


Devuelve un identificador o true (dependiendo de la instrucción) si la instrucción se
ejecuta correctamente y false en caso contrario
Sintaxis:
$consulta = mysql_query (instrucción, $conexion);

Ejemplo:
$consulta = mysql_query ("select * from noticias", $conexion)
or die ("Fallo en la consulta");

Script para la creación de la base de datos para los ejemplos:
Fichero: crearbd.php
22
Acceso a bases de datos MySQL

Obtener y procesar los resultados: mysql_num_rows(),
mysql_fetch_array()




En el caso de que la instrucción enviada produzca unos
resultados, mysql_query() devuelve las filas de la tabla
afectadas por la instrucción
mysql_num_rows() devuelve el número de filas afectadas
Para obtener las distintas filas del resultado se utiliza la
función mysql_fetch_array(), que obtiene una fila del
resultado en un array asociativo cada vez que se invoca
Sintaxis:
$nfilas = mysql_num_rows ($consulta);
$fila = mysql_fetch_array ($consulta);
23
Acceso a bases de datos MySQL

Ejemplo
noticias
1
Título 1
Texto 1
ofertas
05/02/2012
2
Título 2
Texto 2
promociones
05/02/2012
3
Título 3
Texto 3
promociones
04/02/2012
4
Título 4
Texto 4
costas
01/02/2012
5
Título 5
Texto 5
promociones
31/01/2012
Instrucción:
select * from noticias where categoria="promociones"
24
Acceso a bases de datos MySQL

Ejemplo:
noticias
1
Título 1
Texto 1
ofertas
05/02/2004
2
Título 2
Texto 2
promociones
05/02/2004
3
Título 3
Texto 3
promociones
04/02/2004
4
Título 4
Texto 4
costas
01/02/2004
5
Título 5
Texto 5
promociones
31/01/2004
$consulta
$nfilas=3
Instrucción:
select * from noticias where categoria="promociones"
25
Acceso a bases de datos MySQL

Obtención de las filas:
$nfilas = mysql_num_rows ($consulta);
if ($nfilas > 0)
{
for ($i=0; $i<$nfilas; $i++)
{
$fila = mysql_fetch_array ($consulta);
procesar fila i-ésima de los resultados
}
}

Obtener los resultados: mysql_fetch_array() y mysql_fetch_row()

Para acceder a un campo determinado de una fila se usa la siguiente sintaxis:
$fila["nombre_campo“]// por ser un array asociativo
$fila[$i]
// $i=índice del campo desde 0

Ejemplo:
for ($i=0; $i<$nfilas; $i++)
{
$fila = mysql_fetch_array ($consulta);
print "Título: " . $fila["titulo"];
print "Fecha: " . $fila["fecha"];
}
Fichero: select1.php
Fichero: select2.php
26
Acceso a bases de datos MySQL


Cerrar la conexión con el servidor de bases de
datos: mysql_close()
Sintaxis:
mysql_close ($conexion);

Ejemplo
mysql_close ($conexion);
27
Crear tablas.
Las tablas son elementos de las base de datos. Por esa razón nos
resultará imposible crear una tabla sin tener creada y seleccionada una
base de datos.
Es por eso que para la creación de una tabla se necesitan los siguientes
requisitos:

Tener abierta una conexión con el servidor MySQL.

Tener seleccionada una base de datos.
Función para crear una tabla:
mysql_query("sent", $c);
donde "sent" es la sentencia MySQL y $c es la conexión.
28
Ejemplo
<?php
$c=mysql_connect ("localhost","root","") or die ("Imposible conectar");
mysql_select_db ("ejemplos", $c);
$crear="CREATE TABLE IF NOT EXISTS ";
PRIMARY KEY (`num1`),
$crear .="ejemplo1 ";
UNIQUE KEY ….
$crear .="( ";
$crear .="num1 TINYINT , ";
$crear .="num2 TINYINT (3) UNSIGNED ZEROFILL, ";
$crear .="num3 TINYINT (7) UNSIGNED ZEROFILL DEFAULT 13, ";
$crear .="num4 REAL (8,3) ZEROFILL DEFAULT 3.14, ";
$crear .="fecha DATE, ";
$crear .="cadena VARCHAR(32) BINARY, ";
$crear .="opcion ENUM('Si','No','Quiza') ";
$crear .=")";
if(mysql_query($crear,$c)){
print "Se ha creado la tabla<br>";
}else{
print "Se ha producido un error al crear la tabla";
}
?>
Fichero: crear_tabla.php
29
Lectura de resultados de Sentencias SQL.
Como hemos visto anteriormente la función utilizada para
ejecutar cualquier sentencia SQL es:
$r=mysql_query(sent, $c)
El resultado recogido en la variable $r, está estructurado en
líneas y la función:
$t =mysql_fetch_row ($r)
$t =mysql_fetch_array ($r)
30
Lectura de resultados de Sentencias SQL.
$t =mysql_fetch_row ($r)
recoge en una variable ($t) el contenido de la primera línea y coloca
su puntero interno al comienzo de la línea siguiente. Por esta razón la
lectura completa del contenido de la variable $r requiere llamadas
sucesivas a mysql_fetch_row hasta que haya sido leída la última
línea.
La variable $t tiene estructura de array escalar siendo cero el
primero de sus índices.
Cuando el puntero interno de mysql_fetch_row() alcance el final de la
última línea del resultado devolverá FALSE.
31
Ejemplo
<?php function consultartodos()
{
echo "Todos las columnas de todas las filas de la
tabla<br>";
$conexion=mysql_connect ("localhost","root","")or die
("Imposible conectar");
mysql_select_db ("ejemplos", $conexion);
$cadena="select * from noticias";
$consulta=mysql_query($cadena,$conexion) or die ("fallo");
#Dos alternativas
$fila=mysql_fetch_row($consulta);
while ($fila)
{
foreach($fila as $valor)
{echo $valor;}
echo "<br>";
$fila=mysql_fetch_row($consulta);
}
mysql_close ($conexion);
}
?>
while ($fila=mysql_fetch_row($consulta))
{
foreach($fila as $valor)
{echo
$valor;}
echo "<br>";
}
32
Otras funciones Informativas.
mysql_num_fields ($res): Está función -en la que $res es el identificador de resultado devuelve el número de campos de la tabla.
mysql_num_rows ($res):Devuelve el número de registros que contiene la tabla. Si la tabla no
contiene datos devolverá CERO.
mysql_field_table($res, 0): Devuelve el nombre de la tabla. Observa que se pasa con índice
0 ya que esta información parece ser la primera que aparece en la tabla.
mysql_field_type($rs, $i): Nos devuelve el tipo de campo correspondiente a la posición en la
tabla señalada por el índice $i. Dado que la información de primer campo está en el índice 0, el
último valor válido de $i será igual al número de campos menos uno.
mysql_field_len($res, $i): Nos devuelve la longitud del campo correspondiente a la posición
en la tabla señalada por el índice $i. Igual que las anteriores en lo relativo a los índices.
mysql_field_name($rs, $i): Nos devuelve el nombre del campo correspondiente a la posición
en la tabla señalada por el índice $i. En lo relativo a los índices su comportamiento es idéntico a las
anteriores
33
Ejemplo
Visualizar la estructura de una tabla.
<?php
$base="ejemplos";
$tabla="noticias";
$c=mysql_connect ("localhost","root","");
mysql_select_db ($base, $c);
$resultado=mysql_query( "SHOW FIELDS from $tabla",$c);
$numero=mysql_num_rows($resultado);
print "La tabla tiene $numero campos<br>";
while($v=mysql_fetch_row ($resultado)){
foreach($v as $valor) {
echo $valor,"<br>";
}
Fichero: struct.php
}
?>
34
Ejemplo
Eliminar una tabla.
<?php
$base="ejemplos";
$tabla="ejemplo1";
$borrar="DROP TABLE ";
$borrar .=$tabla;
$conexion=mysql_connect ("localhost","root","");
mysql_select_db ($base, $conexion);
if(mysql_query($borrar ,$conexion))
{
echo "<h2> Tabla $tabla borrada con EXITO</h2><br>";
}
else
{
echo "<h2> La tabla $tabla NO HA PODIDO BORRARSE</h2><br>";
}
mysql_close($conexion);
?>
Fichero: borrar_tabla.php
35
Ejemplo
Ejemplo de ALTER TABLE. Eliminar una columna de una tabla
<?php
$base="ejemplos";
$tabla="noticias";
$campo="FECHA";
$borrar="ALTER TABLE ";
$borrar.=$tabla;
$borrar.=" DROP $campo";
$conexion=mysql_connect ("localhost","root","");
mysql_select_db ($base, $conexion);
if(mysql_query ($borrar ,$conexion))
{ echo "<h2> A la tabla $tabla se le ha BORRADO el campo
$campo</h2><br>";}
else
{ echo "<h2> No ha podido BORRAR</h2><br>"; }
mysql_close($conexion);
?>
Fichero: alterdrop.php
36
Ejemplo
Añadir campos a una tabla.
<?php
$base="ejemplos";
$tabla="noticias";
$anadir="ALTER TABLE ";
$anadir.=$tabla;
$anadir.=" ADD nuevocampo TINYINT(12) ";
$conexion=mysql_connect ("localhost","root","");
mysql_select_db ($base, $conexion);
if(mysql_query ($anadir ,$conexion))
{echo "<h2> A la tabla $tabla se le ha añadido un
campo</h2><br>";}
else
{ echo "<h2> No ha podido añadir</h2><br>";}
mysql_close($conexion);
?>
Fichero: alteradd.php
37
Ejemplo
Insertar registros a una base de datos.
Para importar tablas
Fichero: ejemplos.sql
Ejemplo 1 de INSERT
Fichero: insert1.php
Ejemplo 2 de INSERT
Fichero: insert2.php
Formulario de entrada
Fichero: formulario_insercion.php
Script para formulario
Fichero: script_insercion.php
38
Ejemplo
Actualizar registros de tablas.
Formulario
Fichero: formularioActualizacion.php
Script
Fichero: ScriptActualizacion.php
Borrar registros de tablas.
Formulario
Fichero: formularioBorrado.php
Script
Fichero: ScriptBorrado.php
39