unidad didáctica 3 acceso a bases de datos desde lenguajes de script de … · 2017-02-17 ·...

28
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

Upload: phunglien

Post on 29-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

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

3.1 BASES DE DATOS MySQLi y PHP

17/02/2017

IES San

Sebastián

Huelva 28 Implantación de Aplicaciones WEB.

BASES DE DATOS - JJ Taboada

Unidad 3