Download Conferencia 6 Acceso a Datos en PHP Archivo
Document related concepts
Transcript
Asignatura: Programación Web Año: 3ro. Tema II: Programación del lado del servidor. Tipo de clase: Conferencia. Título: Acceso a datos en el lenguaje del lado del servidor Sumario: Bases de datos en la Web. Lenguaje SQL. Acceso a bases de datos MySQL en PHP. Recordando la arquitectura tres capas. Objetivos: • Analizar cómo interacciona el lenguaje de programación PHP con los sistemas gestores de base de datos a través de las librerías de acceso a datos. • Aplicar las principales funciones, clases y métodos para el acceso a bases de datos MySql. Medios: Pizarra, Computador. plumones, TV, 1. Bases de datos en la Web Una de las principales ventajas que presenta el trabajar con páginas dinámicas es el poder almacenar los contenidos en bases de datos. De esta forma, podemos organizarlos, actualizarlos y buscarlos de una manera rápida, eficiente y más simple. Las bases de datos relacionales tienen la posibilidad de relacionar varias tablas de datos entre si, compartir la información, evitan la duplicidad de los datos y permiten almacenar de una forma estructurada y eficiente toda la información de un sitio Web. Además el uso de bases de datos en la Web nos brinda una serie de ventajas tales como: o o o o o o o o o o Dinamismo del sitio Web. Proporcionar información actualizada. Facilitar la realización de búsquedas. Acceso remoto a bases de datos. Implementar sistemas de control de acceso. Almacenar preferencias de los usuarios. Comercio Electrónico. Seguimiento de visitantes. Distribución de multimedia. Servicios al cliente. Bibliotecas de acceso a datos en PHP Quizás la característica más potente y destacable de PHP es su soporte para una gran cantidad de bases de datos. Escribir una interfaz Web para mantener una base de datos es una tarea simple con PHP; ya que cuenta con un conjunto de módulos, extensiones, e incluso bibliotecas de clases para el acceso a múltiples tipos de bases de datos, las que se muestran a continuación: Adabas D Empress IBM DB2 FilePro (read-only) Informix Ingres FrontBase mSQL Direct MS-SQL msSql MySQL ODBC PostgreSQL Velocis Solid Sybase InterBase Oracle (OCI7, OCI8) También se cuenta con una extensión DBX de abstracción de base de datos que permite usar de forma transparente cualquier base de datos soportada por la extensión. Adicionalmente, PHP soporta ODBC (del inglés Open Database Connectivity Standard, en español Estándar Abierto de Conexión con Bases de Datos), así que puede conectarse a cualquier base de datos que soporte tal estándar. Entre ellas se incluyen los productos de Microsoft y muchos otros. Para la conexión a los diferentes tipos de bases de datos el lenguaje PHP cuenta con un conjunto de extensiones de la biblioteca PECL (PHP Extension Community Library), las cuales se pueden incluir directamente en la configuración del PHP en el archivo php.ini o dinámicamente durante la ejecución del script, es decir dentro del código de una página php con la función dl(‘extension.dll’). En la versión de PHP para Windows las extensiones son DLLs que se incluyen al mismo. Algunas de estas extensiones son: • php_mysql.dll Biblioteca de funciones para el acceso a bases de datos MySQL. • php_mysqli.dll Biblioteca de clases para el acceso a bases de datos MySQL • php_pgsql.dll Biblioteca de funciones para el acceso a bases de datos PostgreSQL. • php_mssql.dll Biblioteca de funciones para el acceso a bases de datos MS SQL Server. • php_dbx.dll Biblioteca de funciones para el acceso a bases de datos de tipo: o FrontBase o Microsoft SQL Server o MySQL o ODBC o PostgreSQL o Sybase-CT o Oracle (oci8) o SQLite 2. Recordando el lenguaje SQL SQL (Structured Query Language, Lenguaje de Consulta Estructurado) es un lenguaje declarativo de acceso a base de datos relacionales que permite especificar diversos tipos de operaciones sobre las mismas, además explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones sobre los mismos. Entre las principales características se puede mencionar: • • • • • • El SQL utiliza el álgebra y el cálculo relacional permitiendo utilizar consultas con el fin de recuperar información de interés de una base de datos, de una forma sencilla. Es un lenguaje de cuarta generación (4GL). El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones sobre los mismos. Es un lenguaje declarativo de alto nivel o de no procedimiento. Es orientado al manejo de conjuntos de registros, y no a registros individuales. Permite una alta productividad en codificación. A continuación se muestra el procedimiento a través del cual PHP se comunica con el sistema gestor de base de datos: Para el manejo a cualquier tipo de base de datos es preciso tener un conocimiento básico del DDL (Data Description Language) y el DML (Data Manager Language) del gestor de bases de datos con que se va a trabajar. El DDL y DML no son más que un conjunto de sentencias del lenguaje SQL, para definir o manipular los datos en un gestor determinado, aunque es válido aclarar que este lenguaje varía muy poco de un gestor a otro. Existen cuatro sentencias fundamentales, que son las más utilizadas en cualquier sistema de bases de datos, estas son, INSERT, DELETE, UPDATE y SELECT para insertar, eliminar, actualizar y seleccionar respectivamente campos y filas de una o varias tablas. Veamos su sintaxis básica y algunos ejemplos de uso. Para ello utilizaremos una tabla encuesta con cinco campos: El campo id es el identificador único de la tabla encuesta, el campo nombre, el campo simpleOpcion, el campo categorías y el campo editor: encuesta Id nombre simpleOpcion categoria editor SELECT Sintaxis: SELECT expresión FROM tabla [WHERE condición] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [LIMIT [offset,] row_count | row_count OFFSET offset] Ejemplo: SELECT * from encuesta WHERE simpleOpcion = true ORDER BY categoria DESC Se obtiene todas las encuestas de opción simple ordenadas por el nombre de categoría descendentemente. INSERT Sintaxis: INSERT [INTO] nombre_tabla [(nombre_columna,...)] VALUES ((expresión | DEFAULT),...), (...),... INSERT [INTO] nombre_tabla SET nombre_columna=(expresión | DEFAULT), ... Ejemplo: INSERT INTO encuesta (nombre, simpleOpcion, categoria, editor) VALUES (‘encuesta1’,true,’programacion’,’Tello San’) Inserta una nueva encuesta en la base de datos con los valores especificados. UPDATE Sintaxis: UPDATE nombre_tabla SET nombre_columna1=expr1 [,nombre_columna2=expr2 ...] [WHERE condición] [ORDER BY ...] [LIMIT row_count] Ejemplo: UPDATE encuesta SET editor = “Pedro” WHERE nombre = “encuesta2” Modifica el editor de una encuesta cuyo nombre es “encuesta2” DELETE Sintaxis: DELETE FROM nombre_tabla [WHERE condición] [ORDER BY ...] [LIMIT row_count] Ejemplo: DELETE FROM encuesta where nombre = ‘encuesta2’ Borra todas aquellas encuestas cuyo nombre sea “encuesta2” 3. Acceso a bases de datos MySQL en PHP MySQL es un sistema gestor de base de datos relacionales más utilizados junto a PHP y el apache como servidor web. Entre sus características podemos mencionar: • Es un gestor relacional, multihilo, multiplataforma y multiusuario. • Presenta múltiples motores de almacenamiento (MyISAM, Merge, InnoDB, BDB, Memory/heap, MySSQL Cluster ). • Permite trabajar transaccionalmente. • Disponibilidad en gran cantidad de plataformas y sistemas. • Conectividad segura. • Búsqueda e indexación de campos de texto. • Software de fuente abierta Como se dijo anteriormente para el trabajo con MySQL el lenguaje PHP tiene dos extensiones, php_mysql y php_mysqli. A continuación veremos esta última como la versión mejorada con un modelo orientado a objetos. La extensión php_mysqli contiene tres clases de objetos fundamentales, que son: mysqli: Representa una conexión entre PHP y la base de datos MySQL. mysqli_stmt: Representa una sentencia preparada. mysqli_result: Representa el resultado obtenido de la consulta hecha en la base de datos. De estas tres clases la primera y la última son las más usadas comúnmente. De las cuales estudiaremos sus métodos y propiedades principales. Clase mysqli Métodos mysqli - constructor de un nuevo objeto mysqli. change_user - cambia el usuario del identificador de enlace especificado. close - cierra una conexión previamente abierta. commit - completa la transacción actual. connect - abre una nueva conexión al servidor de MySQL. init - inicializa el objeto mysqli. kill - solicita al servidor destruir un hilo de MySQL. multi_query - realiza consultas de SQL múltiples. more_results - chequea si existen más resultados de la consulta múltiple actualmente ejecutada. next_result - lee el siguiente resultado de la consulta múltiple actualmente ejecutada. ping - llama una conexión con el servidor o reconecta si no hay conexión. prepare - prepara una sentencia SQL. query - ejecuta una sentencia SQL. rollback - deshace la transacción actual. select_db - selecciona la base de datos por defecto. store_result - transfiere un resultado de la última consulta. Propiedades affected_rows - obtiene el número de filas afectadas en la operación MySQL previa. errno - regresa el código de error para la llamada a función más reciente. error - regresa la cadena de error para la llamada a función más reciente. field_count - regresa el número de columnas para la consulta más reciente. insert_id - regresa el identificador generado automáticamente usado en la última consulta. Clase mysqli_result Métodos close - cierra el resultado. data_seek - mueve el puntero interno del resultado. fetch_field - obtiene la información de la columna en el resultado. fetch_fields - obtiene la información para todas las columnas del resultado. fetch_field_direct - obtiene información de la columna para la columna dada. fetch_array - recupera una fila como una matriz asociativa, una matriz numérica, o ambos. fetch_assoc - obtiene una fila como una matriz asociativa. fetch_object - obtiene una fila como un objeto. fetch_row - obtiene una fila como una matriz enumerada. close - libera la memoria ocupada por el resultado. field_seek - fija el apuntador del resultado a la posición especificada. Propiedades current_field - regresa la posición de puntero actual. field_count - regresa el número de campos en el resultado. lengths - regresa una matriz con la longitud de los campos. num_rows - regresa el número de filas en el resultado. Pasos para conectarse de PHP a MySql Los pasos necesarios para acceder desde PHP a una base de datos son los siguientes: 1. Conectar con el servidor de bases de datos. 2. Seleccionar una base de datos. 3. Enviar la instrucción SQL a la base de datos. 4. Obtener y procesar los resultados. 5. Cerrar o liberar la conexión con el servidor de bases de datos. A continuación se muestra cómo lograr el acceso a MySQL desde PHP a través del uso de las funciones que se vieron anteriormente: 1. Conectar con el servidor de bases de datos (Crear el objeto mysqli): $mysqli = new mysqli("localhost", "user", "password"); 2. Seleccionar una base de datos: $mysqli->select_db(“dbname”) 3. Enviar la instrucción SQL a la base de datos: $consulta = $mysqli->query(“sentencia sql”) 4. Obtener y procesar los resultados: $consulta->num_rows() y $consulta ->fetch_object() 5. Cerrar la conexión con el servidor de bases de datos: $mysqli->close() Conectar con el servidor de bases de datos: mysqli_connect(): Devuelve un objeto mysqli con la conexión en caso de éxito y false en caso contrario Sintaxis: $mysqli = new mysqli(servidor, user, pass); Ejemplo: $mysqli = new mysqli(“localhost”, “root”, “root”) or die (“Error al conectarse al SBD”); Seleccionar una base de datos: mysqli_select_db(): Devuelve true en caso de éxito y false en caso contrario. Sintaxis: $mysqli->select_db(database); Ejemplo: $mysqli->select_db (“Encuestas”) or die (“No se puede seleccionar la BD”); Enviar la instrucción SQL a la base de datos: mysqli_query(): Devuelve un objeto mysqli_result o true (dependiendo de la instrucción) si la instrucción se ejecuta correctamente y false en caso contrario. Sintaxis: $consulta = $mysqli->query(query); Ejemplo: $consulta = $mysqli->query(“select * from encuesta”) or die (“Fallo en la consulta”); Obtener y procesar los resultados: mysqli_num_rows, mysqli_fetch_object(): En el caso de que la instrucción enviada produzca unos resultados, mysqli_query() realiza una consulta a la Base de Datos y devuelve las filas de la tabla afectadas por la instrucción. La propiedad mysqli_num_rows devuelve el número de filas afectadas y para obtener los nombres de los valores de las distintas filas del resultado se utiliza la función mysqli_fetch_object(), que obtiene una fila del resultado en un objeto, donde los atributos son los campos de la consulta. Sintaxis: // Obtiene el número de filas de un resultado $nfilas = $consulta ->num_rows; $fila = $consulta->fetch_object($consulta); Obtención de las filas: $nfilas = $consulta ->num_rows; if($nfilas==0){ echo “No se obtuvo ningún resultado”; } else { while ($fila = $consulta->fetch_object()) { //procesar fila i-ésima de los resultados echo “Nombre: ”.$fila->nombre; echo “Categoria: ”.$fila->categoria; } } Cerrar la conexión con el servidor de bases de datos: mysqli_close() Sintaxis: $mysqli->close(); Ejemplo: $mysqli->close(); Recordando la arquitectura tres capas La arquitectura tres capas, separa los datos de una aplicación, la interfaz de usuario y la lógica en tres componentes distintos. Muchas aplicaciones pueden hacer lo siguiente: • Cálculos u otros procesos de negocios. • Ejecución de reglas de negocios. • Validación de datos relacionados al negocio. • Manipulación de datos. • Ejecución de las reglas de datos relacional. • Interactuar con aplicaciones externas o servicios. • Interactuar con otros usuarios. Se pueden tomar estos tipos de servicios y generalizarlos dentro de los tres grupos o capas que a continuación se resumen: • Interfaz de usuario (Capa de Presentación) o Interactuar con otros usuarios. o Interactuar con aplicaciones externas o servicios. • Procesos de negocios (Capa de Negocios) o Cálculos u otros procesos de negocios. o Ejecución de reglas de negocios. o Validación de datos relacionados al negocio. • Procesos de datos (Capa de Servicios de Datos). o Manipulación de datos. o Ejecución de las reglas de datos relacional. La división de estos procesos de aplicaciones y su distribución entre diferentes procesos cliente/servidor son conocidas como Procesamiento Distribuido. Generalizando estos procesos dentro de estas tres categorías o capas es una distribución lógica y no refleja necesariamente alguna opción de diseño físico sobre computadoras, terminales u otros equipos. Se puede desarrollar una aplicación cliente/servidor distribuida basada sobre estas tres capas de Presentación, Lógica de Negocios y Servicios de Datos y tener la aplicación corriendo sobre una simple computadora. Alternativamente, se pueden esparcir estas tres capas a través de un gran número de diferentes computadoras sobre una red. De cualquier forma se ha desarrollado una aplicación cliente/servidor de tres capas. Puede recordar mejor lo explicado anteriormente en la teleconferencia #6 (a partir del minuto 21) Hasta este momento ya se tiene el conocimiento necesario para realizar una pequeña aplicación tres capas. A continuación el profesor debe ilustrar un ejemplo de cómo crear una aplicación tres capas haciendo énfasis en la capa de acceso a datos. Conclusiones: En esta conferencia vimos la importancia del uso de las bases de datos en la Web. Se explicaron algunas de las funciones de acceso a datos que tiene PHP así como las distintas extensiones de PHP para el manejo de bases de datos, sus clases y sus métodos para el acceso a bases de datos de MySQL. Además se trató la diferencia que existe entre la biblioteca de clase Mysqli y la biblioteca de funciones de MySQL; Estudio Independiente: Implementar el acceso a datos de las clases encuesta, encuesta privada y encuesta publica del caso de estudio. Bibliografía: 1. Moodle asignatura de Programación Web Resumen de las funciones de php para trabajar con base de datos 2. http://www.aprende-php.com.ar/ref.dbx.html Para estudiar la extensión .DBX de php