MySQL Con PhpMyAdmin
MySQL Con PhpMyAdmin
Juan Pavn Mestras Dep. Ingeniera del Software e Inteligencia Artificial Facultad de Informtica Universidad Complutense Madrid
PHP
Persistencia de datos
Ficheros Almacenamiento bsico Acceso secuencial o aleatorio Bases de datos Informacin estructurada Relaciones Bsquedas Acceso concurrente Control de acceso a la informacin Integridad
PHP
MySQL
La informacin se guarda en tablas Una tabla es una coleccin de datos relacionados Una tabla consta de columnas (campos) y filas (registros) Las tablas se enlazan por relaciones entre columnas
Implementa casi todo el estndar SQL (Structured Query Language) Cdigo abierto
Actualmente de Oracle, que adquiri Sun, que tena MySQL AB Aplicaciones pequeas y grandes (millones de registros)
Escalable
Transacciones, Multiusuario Eficiente: Multihilo, varias tcnicas de hash, b-tree, etc. Conexin al servidor MySQL con sockets TCP/IP
phpMyAdmin
Herramienta que ofrece una interfaz grfica para la administracin del servidor MySQL
Configuracin del servidor y las bases de datos Gestionar (crear, modificar, borrar) las bases de datos, tablas, campos, relaciones, ndices, etc. Consultas con SQL, y mediante ejemplos (query by example) Definir usuarios y asignar permisos Realizar copias de seguridad Crear grficos (PDF) del esquema de la base de datos Exportar a muchos formatos (documentos de texto, hojas de clculo)
Fichero config.inc.php (en el directorio raz de phpMyAdmin) Pero ms recomendable a travs de la interfaz web de phpMyAdmin en http://www.dominio.com/phpMyAdmin/setup Usar el password del root de mySQL, que se aplica tambin a ese mismo usuario en phpMyAdmin (efectivo tras rearrancar mySQL)
PHP
PHP
Usuarios de MySQL
Cada sitio web tendr sus propias bases de datos El usuario root solo se debe usar para administracin En principio no tiene password, pero habr que ponerlo, por seguridad A continuacin crear un nuevo usuario
por ejemplo para el sitio del ejemplo a continuacin: tienda
Salir de la sesin como root Se puede trabajar con la nueva base de datos
PHP
Indicar un nombre para la base de datos La opcin "collation" indica el conjunto de reglas de comparacin y ordenacin del texto en la base de datos, que depender del idioma Por ejemplo, utf8_general_ci que vale para muchos idiomas y no es sensible a maysculas y minsculas
PHP
Al seleccionar la base de datos creada aparecen las operaciones que se pueden realizar con ella
Se pueden aadir permisos (pestaa Privileges) para que otros usuarios puedan usar la base de datos
En Structure se pueden crear las tablas que definen el esquema de la base de datos
PHP
*Clave primaria (los objetos en esta columna son nicos y no nulos). Ser indexada. **Se pueden definir tambin ndices para mejorar la eficiencia de las bsquedas ***Las claves forneas (foreign keys) identifica una columna (o grupo de columnas) en una tabla que se refiere a otra columna (o grupo de columnas) en otra tabla, generalmente la clave primaria en la tabla referenciada. Contribuyen a gestionar la integridad de la base de datos: no se puede crear un pedido de un cliente o un producto que no existan. Las claves forneas deberan indexarse porque se usarn para seleccionar registros con frecuencia.
Juan Pavn - UCM 2012-13 PHP
10
Creacin de tablas
Cada una con una serie de columnas (campos) Cada campo tendr asociado un tipo: Enteros: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT Nmeros reales: DECIMAL, DOUBLE, FLOAT, REAL Booleanos: BOOLEAN Fecha: DATE, TIME, YEAR Strings: VARCHAR (hasta 256 caracteres), TEXT Como Storage Engine conviene usar InnoDB para poder gestionar relaciones entre tablas Como Collation conviene usar utf8_general_ci
PHP
11
Creacin de tablas
nif: servir como primary key (el nif es nico) nombre: de empresa o de persona (sera nombre + apellidos) Se puede indexar para hacer bsquedas por este campo direccion email telefono: como string para permitir uso de caracteres no numricos
PHP
12
Creacin de tablas
productos pedidos
autoindex
PHP
13
Se pueden recolocar las tablas Para aadir una relacin seleccionar el botn Create relation Seleccionar la primary key de la tabla clientes: nif Seleccionar la foreign key en la tabla pedidos: cliente Aparece una ventana para seleccionar qu hacer para preservar la integridad de las referencias, con las siguientes operaciones:
DELETE: seleccionar RESTRICT UPDATE: seleccionar CASCADE La restriccin ms adecuada en la mayora de los casos es evitar realizar borrados en cascada y actualizar en cascada
La relacin queda establecida y aparece en el grfico Para salvar el diagrama, usar el botn Save
PHP
14
Ambas usan tablas InnoDB como storage engine No hay registros en las tablas Si los hubiera hay que comprobar que concuerdan para mantener la integridad de las referencias El campo en la primera tabla es una clave primaria El campo correspondiente en la segunda tabla est indexado Ambos campos tienen exactamente los mismos tipos de datos Si son numricos, ambos deben ser unsigned (o ninguno)
Una vez que se haya establecido la relacin no ser posible introducir registros en la segunda tabla a menos que se correspondan en el campo de la relacin con el de la primera tabla
PHP
15
Seleccionar la tabla
Seleccionar la pestaa Insert Introducir datos para los campos correspondientes en Value
Tambin se pueden introducir a travs del programa PHP que recupera la informacin que un usuario haya introducido en un formulario de una pgina web En la pestaa Browse se pueden ver los registros de la base de datos y modificar campos de los mismos
PHP
16
Export
Conveniente de forma regular Especialmente si se hacen muchos cambios Opciones (seleccionar Custom en Export Method) Qu se guarda
El servidor completo Una base de datos entera Una tabla
PHP
17
Instalar phpMyAdmin Crear la base de datos tienda con las tablas clientes, productos y pedidos tal como se han definido previamente Insertar elementos en las tres tablas, primero en clientes y productos y luego en pedidos
Comprueba qu ocurre si se intenta introducir un pedido para un cliente que no existe
PHP
18
PHP
httpd
Intrprete PHP (Genera HTML) Busca pgina index.php Consulta index.php
cdigo HTML
Repositorio de pginas
Base de datos
PHP
20
Con PHP5 se recomienda utilizar la extensin MySQLi (Mysql improved) en vez de la tradicional Mysql
Permite utilizar las mejoras de las ltimas versiones del servidor MySQL Interfaz orientada a objetos Interfaz ligera para acceso a bases de datos, con soporte para MySQL y otros sistemas de gestin de bases de datos Un driver especfico para cada SGBD Proporciona una capa de abstraccin para el acceso a datos Independiente del tipo de SGBD
No usa la sintaxis SQL
Orientado a objetos
PHP
21
PHP
22
Para utilizar una base de datos hay que indicar el servidor y la base de datos que se quiere utilizar, con un usuario
$mysqli =newmysqli($hostname, $usuario,$password,$basededatos); if (mysqli_connect_errno()){ echo"ErrordeconexinalaBD:".mysqli_connect_error(); exit(); } Devuelve un objeto sobre el que operar con la base de datos Si hubiera un error se comprueba con el mtodo mysqli_connect_errno()
Cuando se deja de utilizar la base de datos conviene cerrar la conexin al servidor para liberar recursos ordenadamente
$mysqli>close();
PHP
23
PHP
24
Varios atributos y mtodos de la clase mysqli_result facilitan el tratamiento de los registros obtenidos
$numfilas=$resultado>num_rows;
fetch_array() o fetch_all():Devuelve todas las filas en un array asociativo, numrico, o en ambos fetch_assoc(): Lo mismo pero como array asociativo
$registro=mysqli>fetch_array([modo])
Argumento opcional para indicar cmo se accede a los registros
Usando el nombre del campo como ndice: MYSQL_ASSOC Usando la posicin como ndice: MYSQL_NUM Usando tanto el nombre de campo como la posisicn: MYSQL_BOTH
$resultado>free();
PHP
25
$query="SELECT*FROMclientes"; $resultado=$mysqli>query($query) or die($mysqli>error."enlalnea".(__LINE__1)); $numregistros=$resultado>num_rows; echo"<p>ElnmerodeclientesconnombreEmpresa*es:",$numregistros,".</p>"; echo"<table border=2><tr><th>NIF</th><th>Nombre</th><th>Direccin</th> <th>Email</th><th>Telfono</th></tr>"; while ($registro=$resultado>fetch_assoc()) { echo"<tr>"; foreach ($registroas$campo) echo"<td>",$campo,"</td>"; echo"</tr>"; } echo"</table>"; $resultado>free();
PHP
26
SQL
SELECT
>
>=
SELECTtabla1.campo1tabla2.campo2FROMtabla1,tabla2 WHEREcampo3=valor3ANDtabla1.campo1=tabla2.campo2
Tambin se pueden usar patrones para las condiciones % indica cualquier subcadena
Ejemplo: SELECT nombre FROMclientes WHEREnombre LIKEJuan% Ordenar: ORDER BY Para no tener registros duplicados: DISTINCT
27
SQL
INSERT
Inserta nuevos elementos en una tabla Crea un nuevo cliente INSERTINTOclientes(nif,nombre,direccion,email,telefono) VALUES("M3885337J","EmpresaUno","CalleUno,Madrid", "[email protected]","912347898") Actualiza campos de una tabla Modifica el importe del producto "Producto1" UPDATEproductos SETprecio =399.99WHEREnombre="Producto1" Elimina registros de una tabla Elimina pedidos con ms de 30 das de antigedad DELETEFROMpedidos WHEREfecha <CURDATE()10
UPDATE
DELETE
PHP
28
Ejercicio
Listar la informacin de la tabla pedidos indicando el nombre y NIF del cliente, y el coste de cada pedido (cantidad*precio del producto) Definir una funcin que liste todos los pedidos de un cliente dado por su nombre
PHP
29
Bibliografa
Manual PHP oficial http://www.php.net/manual/es/index.php Sitio oficial de phpMyAdmin: http://www.phpmyadmin.net Introduccin sencilla al uso de phpMyAdmin y php con MySQL
http://www.yourwebskills.com/dbbackground.php http://www.yourwebskills.com/beginningmysql.php S. Suehring, T. Converse, J. Park. PHP6 and MySQL Bible. Wiley Pub. 2009 O. Heurtel. PHP y MySQL. Domine el desarrollo de un sitio Web dinmico e interactivo. Ediciones ENI 2009 M. Delisle. Dominar phpMyAdmin para una administracin efectiva de MySQL. Packt Publishing (2007)
Libros
PHP
30
PHP
31
Conectarse con el servidor que la gestiona $conexion =mysql_connect($servidor,$usuario,$password) Devuelve como resultado un recurso de tipo enlace (la conexin a la base de datos) Si hubiera un error devuelve FALSE
En caso de error, si se quiere acabar el script se puede poner: $conexion =mysql_connect($servidor,$usuario,$password)or die("ErrorenconexinalservidorMySQL:".mysql_error());
Seleccionar la base de datos en el servidor mysql_select_db($basedatos,$conexion) La base de datos se especifica en la variable $basedatos Devuelve TRUE si todo va bien, FALSE si hay algn error
mysql_select_db($bd,$conexion)or die("Error:Nosepuedeusarlabasededatos.".mysql_error());
PHP
32
PHP
33
El conjunto de registros resultado del query se guarda en una variable Varias funciones facilitan el tratamiento de los registros obtenidos
$numfilas=mysql_num_rows($resultado)
$registro=mysql_fetch_array($resultado,[modo_de_acceso])
Argumento opcional para indicar cmo se accede a los registros
Usando el nombre del campo como ndice: MYSQL_ASSOC Usando la posicin como ndice: MYSQL_NUM Usando tanto el nombre de campo como la posisicn: MYSQL_BOTH
$registro=mysql_fetch_array($resultado)
PHP
34
$query="SELECT*FROMclientes"; $resultado=mysql_query($query)or die("Errorenlaquery:".mysql_error()); $numregistros=mysql_num_rows($resultado); echo"<p>Elnmeroderegistrosdeclienteses:",$numregistros,".</p>"; echo"<table border=2><tr><th>NIF</th><th>Nombre</th><th>Direccin</th> <th>Email</th><th>Telfono</th></tr>"; while ($registro=mysql_fetch_array ($resultado,MYSQL_ASSOC)){ echo"<tr>"; foreach ($registroas$campo) echo"<td>",$campo,"</td>"; echo"</tr>"; } echo"</table>"; mysql_free_result($resultado);
PHP
35
Cuando se deja de utilizar la base de datos conviene cerrar la conexin al servidor para liberar recursos ordenadamente
mysql_close($conexion);
PHP
36