Unidad Didáctica 3
Acceso a bases de datos desde
lenguajes de script de servidor
3.1 BASES DE DATOS MySQLi y PHP
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva 1
Bases de datos en la Web
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Esquema básico de un sitio web soportado por bases de datos:
Las bases de datos permiten
almacenar de una forma
estructurada y eficiente toda la
información de un sitio web
Instalación y config. de MySQL
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Descargar Instalar Configurar Arrancar Servidor
Conectar con el servidor
Instalar la extensión para MySQL de PHP
http://dev.mysql.com/
mysql-installer-web-community-5.6.26.0.msi
y seguir las indicaciones:
1. Seleccionar Server only
2. Instalar MySQL Server 5.6.26
3. Pasar a la configuración
Asistente para la configuración del servidor
1. Config Type: Sever machine
2. Contraseña para el administrador (root)
3. Crea el usuario alumno1con role: DB Admin y
password alumno1
4. Instalación como servicio Windows
5. Lanzar el servidor manualmente
6. Pulsar Execute para realizar la configuración
7. Pulsar Finish para finalizar el asistente
Si arranque no automático:
C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld –u root
•Desde la línea de órdenes con Inicio > Programas
> MySQL > MySQL Server 5.6 > MySQL Command
Line Client
• Mediante phpMyAdmin
• Usando la biblioteca de funciones de MySQL que
posee PHP
Puesta en servicio desde la consola de
MS-DOS
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Activar el servidor MySql instalado
C:\Program Files \MySQL\MySQL Server 5.6\bin\mysqld –u root -p
Ejecutar instrucciones como usuario (cmd)
Situarse en el drectorio C:\Program Files\MySQL\MySQL Server 5.6\bin\
Y ejecutar mysql –u alumno1 –p
Obtener un listado de todas las bases de datos
Obtener un listado de todas las tablas de la BD mysql
Salir del interface de usuario
mysql> exit
Apagar el servidor MySQL
C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqladmin -u root –p shutdown
Herramienta de administración:
phpMyAdmin
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Descargar Descomprimir Configurar Arranque
http://www.phpmyadmin.net
1. Descomprimir debajo
de la carpeta raíz de la
web (htdocs)
2. Cambiar el nombre de
la carpeta creada a
phpmyadmin
- Localizar el archivo config.sample.inc.php, situado en la carpeta
donde se haya instalado phpMyAdmin,
-Aabrirlo y comprobar que dispone la siguiente configuración
típica para un servidor local:
/* Authentication type *
/$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters *
/$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
- Salvarlo como config.inc.php 1. Ejecutar Apache y MySqld
2. Abrir el navegador y teclear la
url http://localhost/phpmyadmin
Mysql en WampServer
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Al arrancar WampServer se activa el servidor de MySql
Y Podemos acceder a phpMyAdmin
Actividades: Realizar mysql3
Ficheros MySQL
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Durante el proceso de instalación se creó: un subdirectorio llamado data con dos bases de datos : mysql y test.
veintitrés tablas en la base de datos mysql. Una de ellas es user
Cada base de datos que creemos: dará lugar a crear un directorio con el mismo nombre dentro del directorio
data.
Y las tablas que creemos darán lugar a tres ficheros que se almacenarán en dicho directorio
La tabla user contiene información sobre los usuarios, desde qué
máquinas pueden acceder a nuestro servidor MySQL, sus claves y
contraseñas y los permisos de acceso de cada uno de ellos
• Uno con extensión .frm contienen la estructura de cada tabla,
• Otro con extensión .MYD contiene los datos ,
• Otro con MYI contienen los índices de esa tabla.
Tipo
MyISAM
Funciones de PHP para el acceso a
bases de datos MySQL
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Los pasos para acceder desde PHP a una base de datos son los siguientes:
Conectar con el servidor de bases de datos:
mysqli_connect($servidor, $usuario, $contraseña, $nombreBaseDatos)
Seleccionar una base de datos:
mysqli_select_db($conexión, $nombreBaseDatos)
Enviar la instrucción SQL a la base de datos:
mysqli_query($conexion, $sentencia )
Obtener y procesar los resultados:
mysqli_num_rows() y mysqli_fetch_array()
Cerrar la conexión con el servidor de bases de datos:
mysqli_close()
Conexión a MySQL desde PHP (I)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
La conexión la haremos a través de un fichero include mysql.inc.php que
guardaremos en wamp/seguridad.
<?php $mysql_server="localhost"; $mysql_login=“alumno1"; $mysql_pass=“alumno1"; $c; function conecta(&$c){ global $mysql_server, $mysql_login, $mysql_pass; $c=@mysqli_connect($mysql_server,$mysql_login,$mysql_pass); if(!mysqli_connect_errno()){ print "<br>Conexión realizada<br>"; }else{ print "<br>No ha podido realizarse la conexión <br>"; print "<i>Error de conexión número:</i> ". mysqli_connect_errno()." <i>equivalente a:</i> ". mysqli_connect_error(); exit(); } } ?>
Conexión a MySQL desde PHP (II)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
<? php $za=$_SERVER['DOCUMENT_ROOT']; # $za recogeria el valor c:/wamp/www/ $roto=explode('/',$za); # sacaria la cadena en cuatro elementos de un array cuyos separadores son / # haremos nulo el último elemento de array (lo que era www) $roto[sizeof($roto)-1]=""; # recomponemos la cadena y le agregamos "seguridad/ c:/wamp/seguridad/ $zzz=implode("/",$roto)."seguridad/"; include($zzz."mysql.inc.php"); conecta($c); if(mysqli_close($c)){ print "<br>Se ha cerrado la conexión con el servidor de bases de datos<BR>"; } ?> Actividad: Realizar conexion1
Conexión a MySQL desde PHP (III)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
<?
$c=@mysqli_connect("localhost",“alumno1",“alumno1") or die("No se conectó");
if(mysqli_close($c)){
print "<br>Se ha cerrado la conexión con el servidor de bases de datos<BR>";
}
?>
Evita que aparezca un mensaje de error de
php
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.
Listar las bases de datos existentes
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
<? php
#Establecemos la conexión
…..
#Obtenemos las bases de datos
if( $r=mysqli_query($c, “show databases”)){
#Obtenemos el número bases de datos
$numero=mysqli_num_rows($r);
#Listamos los nombres de las bases de datos
while($nom=mysqli_fetch_row($r){
print (“<br>”.$nom[0].”<br>”);
} }
#cerramos la conexión
….. Actividad: Realizar conexion2
Crear y borrar una base de datos
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
requiere una conexión previa
mysqli_query ($c,"CREATE DATABASE nom")
mysqli_query ($c,"DROP DATABASE nom")
Actividades: Realizar crearBaseDatos1 y
crearBaseDatos2
¡Atención!
Creación de tablas
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Tipos de campos en MySql
Campos numéricos
Campos de fecha
Campos de cadena de caracteres
Ejemplo de creación de una tabla
Se ve en el módulo
Bases de Datos
Conexión con el servidor $c=mysqli_connect(h, u, p) Selección de la base de datos mysqli_select_db($c,"n”); Creación de la tabla mysqli_query($c,$sent);
Actividades: Realizar crearTablas1 y
crearTablas2
Ver y modificar estructuras (I)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
$r=mysqli_query($c,"SHOW FIELDS from $tabla”)
$t =mysqli_fetch_row ($r)
Borrar una tabla DROP TABLE IF EXISTS from nombre de la tabla
Borrar uno de los campos de una tabla ALTER TABLE nombre de
la tabla DROP nombre del campo
Añadir un nuevo campo a una tablaALTER TABLE nombre de la
tabla ADD nombre del campo tipo [flags]
$r=mysqli_query($c,$sent);
while($t=mysqli_fech_row($r){
foreach ($t as $valor){
print $valor;
}}
while($t=mysqli_fech_row($r){
$g[]=$t;
}
VISUALIZAR LA
ESTRUCTURA DE UNA
TABLA
Ejercicios: Realizar modificarTablas1
Ver y modificar estructuras (II)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Función Valor devuelto
mysqli_field_count ($c) número de campos de la tabla
mysqli_num_rows ($r) número de registros Si la tabla no
contiene datos devolverá CERO.
Utilizar sentencias SQL nombre de la tabla
tipo de campo
flags del campo
longitud del campo
nombre del campo
mysqli_free_result($r) liberar la parte de la memoria que
contiene un identificador de resultado
Añadir registros
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
INSERT INTO tabla (campo1,campo2,..) VALUES (valor1,valor2,..)
mysqli_errno($c) Indica el número de error que se ha producido en
la transacción MySQL realizada a través del identificador de enlace $c.
Número de error CERO si no error
mysqli_error($c) Devuelve la descripción del error.
Ver ejemplo de añadir un registro
Ver ejemplo de añadir registros de forma aleatoria
Ejercicios: Realizar AñadirRegistros1 y 2
Error número 1050:
Intentar crear
una tabla ya existente.
Error número 1062:
Indica que hemos
tratado de introducir un
valor con clave
duplicada en un campo
con índice único o
principal
La sentencia INSERT con modificadores
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] INTO tabla (campo1,..) VALUES (valor1,..)
LOW_PRIORITY el proceso de escritura esperará a que terminen los
procesos de lectura activos
DELAYED el proceso de lectura se interrumpirá automáticamente para
ceder el paso al de escritura.
IGNORE
Si no está activa: en el momento en el que aparezca una clave duplicada se
interrumpirá el proceso de inserción
si estuviera activa el proceso de inserción continuará
Añadir índices
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Tipo de índice
PRIMARY KEY(campo) •índice principal de la tabla
•no admite valores duplicados
•Solo puede definirse un índice primario por tabla y el campo
utilizado ha de ser un campo no nulo.
UNIQUE nombre (campo) •permite la creación de más de un índice de este tipo por tabla
•no requiere que los campos sobre los que se define sean no nulos.
•no admite valores duplicados
INDEX nombre (campo) crea un índice secundario
INDEX nombre (campo(n))
utilizable sólo en el caso de que el campo índice sea tipo CHAR y
VARCHAR que permite indexar por los n primeros
caracteres de esas cadenas.
El valor de n ha de ser:
n <= 256
Añadir registros a través de
formularios
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Lo estudiamos viendo “detenidamente” los siguientes
ejemplos del cuaderno de ejemplos Base de Datos PHP
Creación del formulario
Script para recogida de los datos enviados
Los valores de SELECT MULTIPLE
<SELECT MULTIPLE name=p_v9[] SIZE=6>
<option value=1>Castellano</option>
<option value=2>Francés</option>
<option value=4>Inglés</option>
<option value=8>Alemán</option>
<option value=16>Búlgaro</option>
<option value=32>Chino</option>
</select>
En la tabla demo4
$crear.="Idiomas SET(' Castellano','
Francés','Inglés',' Alemán',' Búlgaro','
Chino'), ";
Si seleccionamos Francés y Búlgaro el
array sería : var[0]=2,var[1]=16
Si sumamos esos valores (2 + 16) el
resultado sería 18, y al convertir a
binario este valor,
resultará: 010010
Ejercicios: Realizar añadirRegistros3
Consultas en tablas
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Sintaxis MySQL de selección de registros
Ejemplo de Consulta seleccionando registros
Sentencias básicas para consultas
• SELECT campos FROM taba WHERE condiciones
• SELECT campo1,campo2, ... FROM tabla ORDER
BY campo_n [ASC|DESC], campo_m[ASC|DESC]
• SELECT MAX(campo1), MIN (campo2), ... FROM tabla
Actividades: Realiza consulta1 y consulta2
Consulta conjunta de varias tablas
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
SELECT tabla1.campo1, tabla2.campo2, ... FROM tabla1, tabla2
Actividades: Consulta3
Modificar y Borrar registros
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
UPDATE tabla SET campo1=valor1, campo2=valor2
UPDATE tabla SET campo1=valor1, campo2=valor2 WHERE condición
DELETE FROM tabla
DELETE FROM tabla WHERE condición
Actividades: Realiza la Actividad Final propuesta
Imágenes en Tablas
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Las imágenes se pueden guardar en campos del tipo:
BLOB
MEDIUMBLOB
LONBLOB
Para guardar la imagen en el campo:
una vez subida al servidor el archivo temporal, abrir el archivo
en modo lectura y binario
Leer el archivo
Añadir \ antes de las comillas con addslashes
Lectura de la imagen
Según el tamaño en byte de la imagen
header("Content-type: $tipo_imagen”);
echo $registro['imagen'];
Más información
Tablas InnoDB (I)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Permiten realizar transacciones
Definir reglas de integridad referencial
Utilizan un solo archivo por tabla
Creación: Igual que MYISAM pero con Type=InnoDB
Tablas InnoDB (II)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
Transacciones: los datos se registran de forma provisional
hasta que recibe una orden de definitivo:
BEGIN,comienza la transacción
ROLLBACK indica final transacción pero sin hacerse efectivos los
cambios
COMMIT indica final transacción y debe hacerse efectivos los
cambios
Más información
Tablas InnoDB (III)
17/02/2017 Implantación de Aplicaciones WEB.
BASES DE DATOS - JJ Taboada
IES San Sebastián
Huelva
La Integridad referencial ha de establecerse siempre entre
dos tablas: Una es la tabla principal con un índice primario (PRIMARY KEY)
La otra es una tabla vinculada con un índice (no necesariamente único o primario) y
con campos asociado de tipo idéntico a los usados en el índice de la tabla primaria.
Sintaxis:
Ver ejemplo
Más información
CREATE TABLE tablaVinculada (campo1, campo2,...
KEY nombre (campo de vinculacion ),
FOREIGN KEY (campo de vinculacion)
REFERENCES nombre_de la tabla principal (Indice
primario de la tabla principal)
) Type=InnoDB