Your SlideShare is downloading. ×
Apuntes php mysql
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Apuntes php mysql

794
views

Published on


0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
794
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Curso PHP Thales-CICA1. Introducción a las bases de datos.Definición 1. Una base de datos es un conjunto de datos quepertenecen al mismo contexto almacenados sistemáticamente parasu uso posterior.Definición 2. Una base de datos es un conjunto de informaciónestructurada en registros y almacenada en un soporte electrónicolegible desde un ordenador. Cada registro constituye una unidadautónoma de información que puede estar a su vez estructurada endiferentes campos o tipos de datos que se recogen en dicha base dedatos.1.1 Modelo de base de datos.Es básicamente una "descripción" de algo conocido como contenedorde datos (algo en donde se guarda la información), así como de losmétodos para almacenar y recuperar información de esoscontenedores.Los modelos de datos no son cosas físicas: son abstracciones quepermiten la implementación de un sistema eficiente de base dedatos; por lo general se refieren a algoritmos y conceptosmatemáticos.Algunos modelos con frecuencia utilizados en las bases de datos:Modelo jerárquico, modelo de red, modelo orientado a objetos,modelo documental y modelo relacional.1.1.1 Bases de datos jerárquicas.Éstas son bases de datos que, como su nombre indica, almacenan suinformación en una estructura jerárquica. En este modelo los datosse organizan en una forma similar a un árbol, con un nodo principalllamado raíz del que cuelgan nodos hijos (hojas).Una de las principales limitaciones de este modelo es su incapacidadde representar eficientemente la redundancia de datos. 1
  • 2. Curso PHP Thales-CICA1.1.2 Bases de datos de red.Se diferencia del modelo jerárquico en la modificación del conceptode nodo: se permite que un mismo nodo tenga varios padres(posibilidad no permitida en el modelo jerárquico).Fue una gran mejora con respecto al modelo jerárquico, ya queofrecía una solución eficiente al problema de redundancia de datos;pero, aun así, la dificultad que significa administrar la informaciónen una base de datos de red ha significado que sea un modeloutilizado en su mayoría por programadores más que por usuariosfinales.1.1.3 Bases de datos orientadas a objeto.Este modelo, bastante reciente, y propio de los modelos informáticosorientados a objetos, trata de almacenar en la base de datos losobjetos completos (estado y comportamiento).Una base de datos orientada a objetos es una base de datos queincorpora todos los conceptos importantes del paradigma de objetos:Encapsulamiento, herencia y polimorfismo.En bases de datos orientadas a objetos, los usuarios pueden definiroperaciones sobre los datos como parte de la definición de la base dedatos.1.1.4 Bases de datos documentales.Permiten la indexación a texto completo, y en líneas generalesrealizar búsquedas más potentes. 2
  • 3. Curso PHP Thales-CICA1.1.5 Bases de datos relacionales.Este modelo considera la base de datos como una colección derelaciones. De manera simple, una relación representa una tabla, enque cada fila (tupla) representa una colección de valores quedescriben una entidad del mundo real.En este modelo, el lugar y la forma en que se almacenen los datos notienen relevancia Esto tiene la considerable ventaja de que es másfácil de entender y de utilizar para un usuario esporádico de la basede datos. La información puede ser recuperada o almacenadamediante "consultas" que ofrecen una amplia flexibilidad y poderpara administrar la información.2. Diseño de bases de datos relacionales.El primer paso para crear una base de datos, es planificar el tipo deinformación que se quiere almacenar en la misma, teniendo encuenta dos aspectos: la información disponible y la información quenecesitamos.La planificación de la estructura de la base de datos, en particular delas tablas, es vital para la gestión efectiva de la misma. El diseño dela estructura de una tabla consiste en una descripción de cada unode los campos que componen el registro y los valores o datos quecontendrá cada uno de esos campos.Los campos son los distintos tipos de datos que componen la tabla.La definición de un campo requiere: el nombre del campo, el tipo decampo, el ancho del campo, etc.Un mismo problema de almacenamiento de información se puedeafrontar con diferentes esquemas de bases de datos.La calidad de un esquema estará determinada por elcomportamiento o reacción a determinadas operaciones demanipulación (actualización, inserción y borrado).Nosotros en este curso no abarcaremos todos los conceptos debases de datos (dependencias funcionales, formas normales).Simplemente veremos algunos ejemplos de diseños e intentaremosque nuestros diseños cumplan que sus datos no sean redundantes. 3
  • 4. Curso PHP Thales-CICAConcepto de redundancia de datos.Diremos que unos datos son redundantes cuando en una misma basede datos los datos aparecen en más de una tabla.Ejemplo:Supongamos que tenemos una empresa que gestiona un almacén.Y que el gerente que sabe poco de bases de datos nos entrega elsiguiente diseño:- Una tabla clientes que contendrá los datos del cliente: Nombre, apellidos, dirección, ciudad y país.- Una tabla de proveedores: Nombre proveedor, dirección empresa, ciudad y país.- Una tabla de productos: Nombre del proveedor, dirección empresa, ciudad, país, nombre del producto, stock y precio.- Una tabla de factura: Nombre cliente, apellidos cliente, dirección, ciudad, país, nombre del producto, cantidad vendida, precioLo primero que tenemos que corregir es la redundancia de datosexistente en la factura, para ello crearemos un identificador (DNI) enla tabla clientes y usaremos ese identificador para hacer referenciaal cliente en la tabla factura:- Una tabla clientes que contendrá los datos del cliente: DNI, nombre, apellidos, dirección, ciudad y país.- Una tabla de factura: DNI cliente, nombre del producto, cantidad vendida, precio.Con ello hemos eliminado los datos redundantes de nombre, apellido,dirección, ciudad y país que ahora no aparecerán en la factura.Si queremos conocer esos datos en la factura simplementeobservaremos el DNI cliente y buscaremos ese dni en la tablaclientes. 4
  • 5. Curso PHP Thales-CICALo mismo hacemos con los datos redundantes del proveedor de latabla productos, con lo que nuestras tablas quedarían así:- Una tabla clientes que contendrá los datos del cliente: DNI, nombre, apellidos, dirección, ciudad y país.- Una tabla de proveedores: IdProveedor, Nombre proveedor, dirección empresa, ciudad y país.- Una tabla de productos: Idproveedor, nombre del producto, stock y precio.- Una tabla de factura: DNI cliente, nombre del producto, cantidad vendida, precio( Si el nombre del proveedor es único se podía haber utilizado este como identificador o clave)Aún tenemos un dato redundante...el precio del producto, así queharemos un idproducto:- Una tabla clientes que contendrá los datos del cliente: DNI, nombre, apellidos, dirección, ciudad y país.- Una tabla de proveedores: IdProveedor, Nombre proovedor, dirección empresa, ciudad y país.- Una tabla de productos: Idproducto, Idproveedor, nombre del producto, stock y precio.- Una tabla de factura: DNI cliente, idproducto, cantidad vendida.Ahora si analizamos bien las tablas nos encontraríamos con unproblema en el diseño de la tabla factura... ¿como se yo queproductos van en una factura? Ahora mismo solo dispongo de loscampos dnicliente, idproducto y la cantidad... pero ese cliente hapodido comprar varias veces y por tanto tener más de una factura ....o también ha podido comprar más de un producto en la mismacompra. 5
  • 6. Curso PHP Thales-CICATendríamos que generar 2 nuevas tablas, una tabla que relacionecada cliente con un idfactura y otra tabla que relaciona un idfacturacon el idproducto y la cantidad:- Una tabla clientes que contendrá los datos del cliente: DNI, nombre, apellidos, dirección, ciudad y país.- Una tabla de proveedores: IdProveedor, Nombre proveedor, dirección empresa, ciudad y pais.- Una tabla de productos: Idproducto, Idproveedor, nombre del producto, stock y precio.- Una tabla de facturas: dnicliente, idfactura- Una tabla factura idfactura, idproducto, cantidad vendida.Si nos fijamos la tabla facturas no tiene identificador, si nos hicierafalta a la hora de programar podríamos insertar uno.El idfactura de la tabla factura es un id que se repetirá en la tabla,para conocer los productos que pertenecen a una determinadafactura buscaremos las apariciones de ese id en la tabla facturaobteniendo así sus productos y cantidad vendida asociados, paraconocer el cliente de la factura simplemente consultaremos la tablafacturas.Ya hemos eliminado la redundancia de datos y hemos resuelto elproblema de la factura. Podríamos seguir haciendo modificacionesen las tablas para hacerlas mas eficientes pero no es nuestroobjetivo.Como hemos visto el diseño de la bases de datos no es algo fácil dehacer, hay que dedicarle tiempo a estudiar las necesidades delproblema y encontrar un diseño que minimice el tamaño de la basede datos, sea un diseño compacto y que además no complique enexceso la programación posterior de la aplicación que trabaje conella.Nos llevaría mucho tiempo explicar toda la teoría de bases de datos.Si alguien quiere ampliar conocimientos en el tema en la biografíahemos añadido enlaces interesantes sobre el tema. 6
  • 7. Curso PHP Thales-CICA3. SQL.El SQL (Structured Query Language) es un lenguaje estándar quenos permite comunicarnos con la base de datos.Una sentencia SQL es como una frase con la que decimos lo quequeremos obtener y de donde obtenerlo.Todas las sentencias empiezan con una palabra reservada que indicala acción a realizar, seguido del resto de cláusulas, algunasobligatorias y otras opcionales.Comentemos los conceptos mas importantes de SQL que nospermitirán realizar operaciones sencillas, para realizar operacionesmás complejas tendremos que profundizar en el estudio dellenguaje.Comandos DDL (Definición de datos):CREATE. Crea una tabla o una base de datos.Su sintaxis es: CREATE TABLE nombre_tabla ; CREATE DATABASE nombre_base_de_datos ;DROP. Elimina una tabla o una base de datos.Su sintaxis es: DROP TABLE nombre_tabla ; DROP DATABASE nombre_base_de_datos ;ALTER. Modifica la estructura de una tabla. Añadiendo o eliminando una columna según usemos add o drop.Su sintaxis es: ALTER TABLE ADD nombre_columna tipo_de_dato ALTER TABLE DROP COLUMN nombre_columnaComandos MDL (Manipulación de datos):INSERT. Nos permite insertar datos en la base de datos.Su sintaxis es: INSERT INTO nombre_tabla VALUES (valor1,v2...)INSERT INTO clientes VALUES ( ‘pepe’,’martin’,43,’228765435L’) 7
  • 8. Curso PHP Thales-CICASELECT. Nos permite hacer una selección en la base de datos.Su sintaxis es: SELECT nombres_columnas_a_mostrar FROMnombre_de_tablas ( Clausula WHERE )Podemos:- Usar todas las columnas de la tabla: SELECT * FROM clientes- Elegir determinadas columnas de la tabla: SELECT nombre, apellidos FROM clientes- Elegir todos los campos de varias tablas: SELECT * FROM clientes , empleados- Elegir algunos campos de algunas tablas: SELECT clientes.nombre, pais.ciudad apellidos FROM clientes , pais ( Usamos nombre_tabla.nombre_columna)Existe la opción DISTINCT que nos permite eliminar elementosrepetidos de una selección.SELECT DISTINCT nombre , apellido FROM clientes, vendedoresUPDATE. Nos permite actualizar los datos de la base de datos.Su sintaxis es: UPDATE nombre_tabla SET nombre_columna = nuevo_valor WHERE CondiciónUna condicion simple puede ser: nombre_columna LIKE ‘valor’Podemos modificar el valor de una columnaUPDATE Cliente SET Nombre = Ramon WHERE Apellido LIKE“Martin”o modificar el valor de varias columnasUPDATE Cliente SET Nombre = Ramon , telefono = 637453783WHERE dni LIKE ‘232332323G’ 8
  • 9. Curso PHP Thales-CICAClausula WHERE. Sirve para establecer las condiciones de quedatos se manipularan.Su sintaxis: WHERE columna operador valor Lista de operadores: = Igualdad LIKE Igualdad para cadenas <> Desigualdad > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que BETWEEN Entre un rango de valoresLos valores de las cadenas se ponen entre cadenas dobles o simples,los valores numéricos no.SELECT nombre , precio FROM producto WHERE precio > ‘300’ErrorSELECT nombre , precio FROM producto WHERE precio > 300Correcto , mostraría el nombre del producto y el precio de aquelloscuyo precio fuese superior a 300.SELECT * FROM producto WHERE precio BETWEEN 300 AND 400devuelve los productos cuyo precio está entre 300 y 400Utilizaremos los operadores AND y OR para construir condicionesmas complejas.SELECT nombre , precio FROM producto WHERE precio > 300AND nombre LIKE ‘a%’Mostraría el nombre y el precio de los productos cuyo precio essuperior a 300 y su nombre empieza por aSELECT nombre , precio FROM producto WHERE precio > 300AND nombre LIKE ‘%a’Mostraría el nombre y el precio de los productos cuyo precio essuperior a 300 o que su nombre termina por a 9
  • 10. Curso PHP Thales-CICAClausula IN. Evita hacer usos reiterados de OR cuando queremosque un valor valga cualquiera de un rango de valores.SELECT nombre FROM cliente WHERE pais IN (‘España’,‘Portugal’, ‘Brasil’, ‘Italia’)Devulve los nombres de los clientes asociados a uno de esos paisesAlias Sirve para renombrar columnas. Nos es muy útil cuando tengocolumnas de diferentes tablas con el mismo nombre.SELECT clientes.nombre AS nombre_cliente ,vendedores.nombreAS nombre_vendedores from clientes,vendedoresOrder by. Sirve para ordenar una selección. Ascendentemente ASCo descendentemente DESC.SELECT * from clientes ORDER BY nombre ASCSe pueden ordenar por varios campos tambiénSELECT * from clientes ORDER BY nombre , apellidos DESCPara probar si los comandos sql son correctos o no podemos utilizarla herramienta PhPMyAdmin descrita en temas anteriores. 10
  • 11. Curso PHP Thales-CICASerá un método rápido para depurar errores ( no existe la tabla ) ( comando sql con error sintáctico, se escribe select y no selet ) (la tabla está vacia por lo que no devolverá datos)A veces hacemos consultas incorrectas creyendo q devolverán unresultado pero devuelven otro, es conveniente comprobar con elphpmyadmin que el resultado devuelto es el adecuado.) 11
  • 12. Curso PHP Thales-CICATambién podremos generar consultas mas o menos simples con laherramienta: 12
  • 13. Curso PHP Thales-CICA4. Funciones php para trabajar con mysql.mysql_connect.Def. Es la primera función que tendremos que utilizar antes derealizar cualquier operación en la base de datos pues es la que nosabre una conexión con el sistema de base de datos.Sintaxis. int mysql_connect ( $hostname , $usuario , $password )La función nos devolverá un entero que va a ser el identificador de laconexión, este entero tendremos que suministrárselo a lasoperaciones que manipulan la base de datos como veremos masadelante. Nosotros por convenio guardaremos ese identificador delenlace en la variable link.Ejemplo. $link = mysql_connect (“localhost”,”root”,”contraseña” );mysql_close.Def. Cierra una conexión con la base de datos, la conexión vieneidentificada por el link suministrado a la función.Si no se especifica un identificador de conexión, se asume le de laúltima conexión abierta.Sintaxis. int mysql_close ( $link )Devuelve true(1) si se ha cerrado sin ningún problema, de locontrario devuelve false(0).mysql_select_db.Def. Selecciona la base de datos con la que vamos a trabajar.Sintaxis. int mysql_select_db ( $nombre_base_de_datos , $link) 13
  • 14. Curso PHP Thales-CICAmysql_list_dbs.Def. Nos sirve para conocer las bases de datos disponibles en unservidor de bases de datos.Sintaxis. $lista_db = mysql_list_dbs( $link) ;$lista_db será un puntero de resultado, para imprimir las bdtendremos que:- opcion1. Usar la función mysql_fetch_object que devuelve una filade resultado como un objeto.Dentro de la fila de resultado me interesa sólo el nombre de la basede datos , por lo tanto solo accedo al campo Database de la fila.- opcion2. Obtener el numero de bases de datos encontradas con lafunción mysql_num_rows e ir obteniendo los nombres de las basesde datos a partir del puntero resultado con mysql_db_name, funciónque dado un puntero resultado de bases de datos y un indicedevuelve el nombre de la base de datos asociada.Ejemplo. Imprimir la lista de bases de datos disponibles en elservidor$link = mysql_connect(localhost, usuario, pass); //conexión$lista_db = mysql_list_dbs($link); // puntero a resultadoopcion1:while ($row = mysql_fetch_object($lista_db)) // recorro{echo $row->Database."<br>"; //imprimo nombre de la bd}opcion2:$i = 0;$num_db = mysql_num_rows($lista_db); //numero de bdwhile ($i < $num_db){ // mientras queden bd echo mysql_db_name($lista_db, $i) . "<br>"; // imprimo $i++;} 14
  • 15. Curso PHP Thales-CICAmysql_num_rows.Def. Devuelve el número de filas de un resultado.mysql_num_fields.Def. Devuelve el número de campos de un resultado.mysql_list_tables.Def. Nos sirve para conocer las tablas de una base de datosSintaxis. $result = mysql_list_tables($nombre_bd);Ejemplo.$result = mysql_list_tables($nombre_bd);while ($row = mysql_fetch_array($result)){ echo "Tabla: “.$row[0].”<br>";}mysql_fetch_array.Def. Anteriormente vimos la funcion mysql_fetch_object, esta funciónes igual que la anterior con la diferencia que esta devuelve una arrayen lugar de un objeto. Con el objeto sólo podemos acceder a losdatos por el nombre del campo, con el array podemos ademásacceder por el indice.Esta función distingue mayuscula y minuscula en los campos .Sintaxis. array mysql_fetch_array ($puntero_resultado) 15
  • 16. Curso PHP Thales-CICAmysql_query.Def. Nos sirve para hacer las manipulaciones de una base de datos.Esta base de datos es la referenciada por $link, si no se suministra$link se opera sobre la base de datos con la que se abrió el últimoenlace.Sintaxis. $result = mysql_query($query , $link)Esta función devuelve un recurso, en este caso un recurso.Para calcular el tipo de un recurso utilizamos la función get_resourcetype($recurso).Ejemplo.$sql= ”SELECT * FROM clientes WHERE nombre LIKE luis “;$result = mysql_query($sql,$link);if (!$result){ echo “Hubo un error:”.mysql_error());}Siempre guardaremos la consulta a realizar en la variable $sql.(Recordemos que conviene comprobar el correcto funcionamiento,tanto de sintaxis como de resultado esperado ejecutándola en elphpmyadmin).Si se produce un error en la función mysql_query se devuelve false,es posible saber que error se ha producido, para ello hacemos uso dela función mysql_error, que devuelve una cadena con el mensaje deerror de la última operación mysql.mysql_result.Def. Devuelve los datos de un resultado.Sintaxis. int mysql_result ( $result, $fila )int mysql_result ( $result, $fila , $campo) //campo asociativo 16
  • 17. Curso PHP Thales-CICAEjemplo.$sql = “ SELECT name as nombre FROM client “;$result = mysql_query($sql,$link);echo mysql_result($result, 2,nombre); // Imprime el empleado 2do // del resultadoLas llamadas a mysql_result() no deben mezclarse con llamadas a lasotras sentencias que trabajan con un identificador de resultado.Nota: Si en la consulta utilizamos un alias, deberemos utilizar esealias para acceder al campo y no el nombre del campo de la tabla.mysql_free_result.Def. Libera la memoria de la variable que contiene el resultado,usaremos $result para contener este resultado.Sintaxis. int mysql_free_result($result)mysql_close.Def. Cierra una conexión.Sintaxis. Int mysql_close($link)Además de estos comandos de mysql existen los llamados comandosmysqli , pertenecientes a una versión mejorada de mysql.Basicamente se encuentran versiones mejoradas de las funciones yadescritas y algunas nuevas funciones.Podeis encontrar una lista de las funciones en el siguiente enlace:http://es.php.net/manual/es/ref.mysqli.php 17
  • 18. Curso PHP Thales-CICABibliografía de bases de datosDate, C.J., Introducción a los Sistemas de Bases de Datos, 7ª Edición,Addison Wesley, 2001.Elmasri-Navathe, Fundamentos de Sistemas de Bases de Datos, 3ªEdición, Addison Wesley, 2000.Korth, H., A. Silberschatz, Fundamentos de Bases de Datos, 4ªEdición, McGraw-Hill, 2002.Gardarin, G., Dominar las Bases de Datos, Ediciones Gestión 2000,1993.http://es.wikipedia.orghttp://www.tejedoresdelweb.com/307/article-65413.htmlBibliografía de SQLhttp://www.w3schools.com/sql/http://desarrolloweb.com/articulos/262.php?manual=9http://www.aulaclic.es/sql/f_sql.htmhttp://www.unav.es/cti/manuales/Intro_SQL/indice.htmlBibliografía de funciones mysql de phphttp://www.php.net/manual/es/ref.mysql.php 18