Introducción al desarrollo web (idesweb)

Documentos relacionados
Introducción al desarrollo web (idesweb) - 3 a ed.

Introducción al desarrollo web (idesweb) - 3 a ed.

Introducción al desarrollo web (idesweb)

Introducción al desarrollo web (idesweb)

Introducción al desarrollo web (idesweb)

Tema: MAPEO OBJETO RELACIONAL (ORM) - ADODB

PHP. Introducción (1) Introducción (3) Introducción (2) PHP 1

PHP Hypertext PreProcessor

Introducción al desarrollo web (idesweb)

PUF del SAID. Las Preguntas de Uso Frecuentes (PUF) del Sistema Administrativo Integrado Descentralizado

Qué es una base de datos?

PEAR: Modulos y Extensiones de PHP

Objetivos y Temario CURSO MySQL 5

Programación Hipermedia I

A continuación se presenta la forma en que se puede conectar PHP con el gestor de bases de datos MySQL.

GESTORES GESTORES DE BASES DE DATOS

CÓMO CREAR UNA BASE DE DATOS MySQL PARA PRACTICAR CON PHP. ACCESO AL GESTOR phpmyadmin. (CU00839B)

JAV JA A V S A C S R C I R P I T

Tutorial 3. Conexión a Bases de Datos con NetBeans 5.0

Tema IV El lenguaje de programación PHP Tipos de Datos

CESAR BUSTAMANTE

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

Introducción. Requisitos para el inicio. Derechos de acceso. Elaboración de informes. Information Server Instrucciones de uso.

T.S.U. Leonardo Caballero FUNDACITE-MÉRIDA

PHP INSERT INTO VALUES. INSERTAR DATOS (REGISTROS O FILAS) EN BASE DE DATOS MySQL. EJEMPLOS Y EJERCICIO RESUELTO (CU00843B)

Oracle Database: Programación con PL/SQL

BUENOS DIAS! Ing. Germán Ziegler

Programación Hipermedia 1

El lenguaje de programación PHP Tipos de Datos. Semestre: A-2010

DISEÑO CURRICULAR ELECTIVA II. DESARROLLO DE APLICACIONES WEB

PHP/Mysql Pasos fundamentales

Introducción al desarrollo web (idesweb)

Descripción del tutorial. Contenidos.

ELABORACIÓN DE PÁGINAS WEB. CBTIS No. 02 ISC. RICARDO GARCÍA LÓPEZ

INSTITUTO POLITÉCNICO NACIONAL WEB APPLICATION DEVELOPMENT. CIFUENTES ALVAREZ ALEJANDRO SIGFRIDO 3cm3 PROYECTO TERCER PARCIAL MI HOTMAIL CON JOOMLA

PEAR: The PHP Extension and Application Repository.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

Manual del usuario y de referencia

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

La Herramienta Redmine para la Administración de Proyectos

LENGUAJES JÓVENES PROGRAMADORES

Acceso a base de datos SQLite desde Gambas

1. Servidor Web. (apache). 2. PHP. 3. Manejador de base de datos (mysql, postgress).

MySQL. Historia del proyecto

Manual del Integrador Contable Premium Soft

Jornadas sobre Gnu/Linex: Uso de Software Libre en las Administraciones públicas. Sonia Pizarro Redondo

USO DEL ENTORNO DE NETBEANS PARA LA CONEXIÓN DE BASE DE DATOS

MICROSOFT ACCESS 2016 Avanzado

Curso de PHP. Acceso a bases de datos MySQL en PHP

Almacenar y acceder a Información universitaria. Almacenar y acceder información de tipo de imágenes u otros formatos.

PHP - II. Elaborador por: Edgar Manuel Amézquita y Sebastián González R.

Programación Hipermedia I

1. Capítulo 1: Herramientas de Software para el sistema

PHP y MySQL PHP. Aplicaciones Web/Sistemas Web. Breve introducción a MySQL con phpmyadmin

PROYECTO 2 Parte 1 BASES DE DATOS. Curso (2 Semestre) Grupos 4F2M y 4F1M-1 (aula 5102) CONSULTAS REMOTAS EN JAVA A UNA BASE DE DATOS

Desarrollo de aplicaciones de acceso a base de datos con JBuilder 7

1

ojovoz Una plataforma de código abierto para la creación de memorias comunitarias. Manual del usuario

Instalación y Configuración de MySQL

NOTA:Necesario verificar el nombre de nuestro Servidor-Equipo en donde está nuestro sistema gestor de base de datos.

Índice: Tema Conexión con Bases de Datos

Para entornos con más de un equipo conectados en red es necesario que el programa de firewall conceda paso a los servicios de Microsoft SQL Server.

Sincronizador de Información Táctica

Mejoras en el Re-instalable 06 de Aspel-BANCO 4.0

Diseño WEB. Nivel: 5º semestre Horas semanales: 3 horas Código: Créditos: 2 créditos

MANUAL PARA EL USO DEL Y PROTOTIPO DE UN GESTOR DE CONTENIDOS PARA PÁGINAS WEB CARLOS ALBERTO LONDOÑO LOAIZA JOHN ALEXANDER CALDERON HERANANDEZ

... advanced access control software Guía de usuario. for

Programación. Práctica Final

Introducción al desarrollo web (idesweb)

MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5

Programación Gambas 3 Prof: Mileti, P. Acceso a base de datos SQLite desde Gambas 3.

MANUAL DE OPERACIÓN SISTEMA INTELISIS FECHAS

UNIDAD 2: Bases de Datos en Visual Basic

Cómo instalar Estudio One SQL versión 2.30 en Sistema Operativo Windows de 64 bits

III Curso de Diseño de Sitios WEB basados en Gestores de Contenido (CMS)

Programación páginas web. Servidor (PHP)

Equipamiento ADSL» Inalámbrico. Adaptador USB PAUTAS PARA LA VERIFICACION TCP/IP

Curso básico de creación de páginas web

Qué es PHP? Example #1 Un ejemplo introductorio "<?,?>".

Para instalar la radio en la PC sólo se tiene que seguir estos paso.

FUNDAMENTOS DE PROGRAMACION WEB

Agente de Comunicaciones Manual de Usuario

1 Objetivo. Diseño de Interfaces Hombre Máquina. Práctica 6 Acceso a bases de datos

PRACTICA FINAL. Diseño e implementación de un servidor Web básico y cliente http. Protocolo HTTP-RC

Acceso a bases de datos en Perl

Administración de dispositivos móviles

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador

LENGUAJE PHP Y CAKEPHP FRAMEWORK

Qué es World Wide Web? La red como instrumento de comunicación. Sugerencias para sacar el máximo partido de WWW. Requisitos para utilizar WWW

TÓTEM TURÍSTICO Y APP MÓVIL REPÜ

Linux Avanzado: Redes y Servidores (Versión Ubuntu)

Encuentro de Red de Desarrolladores de la BVS. Propuesta de plataforma de metabuscadores para la BVS. Autor: Lic. Alfonso Alí Herrera

PHP 5.6 Desarrollar un sitio web dinámico e interactivo

Transcripción:

Introducción al desarrollo web (idesweb) Práctica 12: PHP 6 (acceso a una base de datos con mysqli y ADOdb) 1. Objetivos Aprender a acceder a una base de datos desde PHP con mysqli. Aprender a acceder a una base de datos desde PHP con ADOdb. 2. Recursos Qué es mysqli? MySQL Improved Extension 1 : documentación oficial de mysqli. ext/mysqli: Part I - Overview and Prepared Statements 2 y Using ext/mysqli: Part II - Extending mysqli 3 : explica de forma detallada y clara el empleo de mysqli. Qué ADOdb? ADOdb Database Abstraction Library for PHP (and Python) 4 : página oficial del proyecto ADOdb. ADOdb Manual 5 : manual de la librería ADOdb. Existe una traducción al español 6, pero no está actualizada. Tutorial: Moving from MySQL to ADODB 7 : tutorial que explica cómo pasar de usar las funciones nativas de MySQL a emplear el acceso mediante ADOdb. Existe una traducción al español 8, pero no está actualizada. Implica alguna pérdida de rendimiento emplear ADOdb o alguna otra capa intermedia en el acceso a una base de datos? PHP Database Functions vs. PEAR::DB vs. ADOdb (and PDO) 9 : compara el tiempo necesario para realizar una consulta SQL sencilla mediante tres métodos (funciones nativas de la base de datos, PEAR::DB y ADOdb). 3. Qué tengo que hacer? En esta práctica se van a desarrollar las funciones que faltan para que la aplicación esté completa y operativa. Una parte se va a implementar con mysqli y otra parte con ADOdb. Mediante mysqli tienes que implementar las siguientes nuevas opciones: Página detalle usuario : muestra los datos de registro del usuario y un listado de todos sus álbumes. Si se selecciona un álbum, se muestra un listado de la fotos que contiene mediante [Página Ver álbum ]. 1 http://es.php.net/manual/es/book.mysqli.php 2 http://devzone.zend.com/node/view/id/686 3 http://devzone.zend.com/article/687 4 http://adodb.sourceforge.net/ 5 http://phplens.com/lens/adodb/docs-adodb.htm 6 http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm 7 http://phplens.com/lens/adodb/tute.htm 8 http://www.lacorona.com.mx/fortiz/adodb/tute-es.htm 9 http://joseph.randomnetworks.com/archives/2006/04/04/php-database-functions-vs-peardb-vs-adodb/ 1

Figura 1: Diagrama de páginas que componen el sitio web Respuesta Eliminar foto : desde la [Página Ver álbum ] del menú de usuario registrado, elimina una foto de un álbum (solicitar confirmación). Opcional: permitir que el usuario pueda eliminar múltiples fotos de una sola vez. Página Ver álbum : desde la [Página detalle foto] y la [Página detalle usuario], muestra todas las fotos que contiene el álbum seleccionado. Respuesta Eliminar álbum : desde la [Página Mis álbumes ] del menú de usuario registrado, elimina un álbum y todas las fotos que contiene (solicitar confirmación). En concreto, tienes que modificar o crear las páginas que se indican con un color de relleno oscuro en la Figura 1. Además, mediante ADOdb tienes que implementar un sistema de comentarios para las fotos. Este sistema sólo está disponible para los usuarios registrados. Un usuario puede publicar uno o varios comentarios en cualquier foto. Un comentario se compone de un texto y una fecha. Los comentarios se visualizan cuando se consultan los detalles de una foto. Para desarrollar esta nueva función tendrás que modificar la estructura de la base de datos. Opcional: puedes hacer que los comentarios sean moderados, y no se publiquen hasta que el propietario de la foto los revise y los acepte. 2

4. Cómo lo hago? 4.1. Uso de mysqli mysqli es una extensión de PHP que permite acceder a ciertas funciones disponibles a partir de MySQL 4.1 que no se pueden emplear con la extensión tradicional mysql. mysqli proporciona una mayor velocidad, una mayor seguridad, un interfaz procedural u orientado a objetos y el empleo del nuevo protocolo binario de MySQL 4.1 que permite ciertas funciones como la ejecución de sentencias preparadas. Si se emplea el interfaz orientado a objetos, el programador puede desarrollar sus propias clases de acceso a la base de datos que hereden de las proporcionadas por la extensión, lo que permite un mayor control y adecuación a las necesidades de cada uno. Las principales funciones que se emplean en el interfaz procedural son: mysqli_connect(servidor, usuario, contraseña, basedatos): devuelve un identificador de recurso o false si la conexión falla. mysqli_connect_error(): devuelve una descripción del último error de conexión. mysqli_query(identificador, sentencia): ejecuta una sentencia SQL. mysqli_error(identificador): devuelve una descripción del último error. mysqli_fetch_assoc(resultado): devuelve la siguiente fila en el resultado o false en caso contrario. mysqli_free_result(resultado): libera la memoria empleada por un resultado. mysqli_close(identificador): cierra la conexión con una base de datos. El siguiente ejemplo muestra como se realiza un acceso a una base de datos mediante el interfaz procedural; se emplea el operador de control de errores @ para evitar que se muestren en la página posibles mensajes de error: <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>prueba de SELECT y mysqli procedural</title> </head> <body> <?php // Conecta con el servidor de MySQL $link = @mysqli_connect( localhost, // El servidor wwwdata, // El usuario, // La contraseña biblioteca ); // La base de datos if(!$link) { echo <p>error al conectar con la base de datos:. mysqli_connect_error(); echo </p> ; exit; // Ejecuta una sentencia SQL $sentencia = SELECT * FROM libros ; if(!($resultado = @mysqli_query($link, $sentencia))) { echo "<p>error al ejecutar la sentencia <b>$sentencia</b>: ". mysqli_error($link); echo </p> ; exit; 3

echo <table><tr> ; echo <th>idlibro</th><th>título</th><th>resumen</th> ; echo <th>autor</th><th>categoría</th><th>editorial</th><th>anyo</th> ; // Recorre el resultado y lo muestra en forma de tabla HTML while($fila = mysqli_fetch_assoc($resultado)) { echo <tr> ; echo <td>. $fila[ IdLibro ]. </td> ; echo <td>. $fila[ Titulo ]. </td> ; echo <td>. $fila[ Resumen ]. </td> ; echo <td>. $fila[ Autor ]. </td> ; echo <td>. $fila[ Categoria ]. </td> ; echo <td>. $fila[ Editorial ]. </td> ; echo <td>. $fila[ Anyo ]. </td> ; echo </table> ; // Libera la memoria ocupada por el resultado mysqli_free_result($resultado); // Cierra la conexión mysqli_close($link);?> </body> </html> A continuación se muestra el ejemplo anterior pero programado con el interfaz orientado a objetos de mysqli. En este caso, se emplea new mysqli() para crear la conexión y lo que antes eran llamadas a funciones se convierten en llamadas a métodos del objeto creado por new mysqli(); para acceder a los métodos y propiedades de un objeto se emplea el operador -> : <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>prueba de SELECT y mysqli orientado a objetos</title> </head> <body> <?php // Conecta con el servidor de MySQL $mysqli = @new mysqli( localhost, // El servidor wwwdata, // El usuario, // La contraseña biblioteca ); // La base de datos if(mysqli_connect_errno()) { echo <p>error al conectar con la base de datos:. mysqli_connect_error(); echo </p> ; exit; // Ejecuta una sentencia SQL $sentencia = SELECT * FROM libros ; if(!($resultado = $mysqli->query($sentencia))) { 4

echo "<p>error al ejecutar la sentencia <b>$sentencia</b>: ". $mysqli->error; echo </p> ; exit; echo <table><tr> ; echo <th>idlibro</th><th>título</th><th>resumen</th> ; echo <th>autor</th><th>categoría</th><th>editorial</th><th>anyo</th> ; // Recorre el resultado y lo muestra en forma de tabla HTML while($fila = $resultado->fetch_assoc()) { echo <tr> ; echo <td>. $fila[ IdLibro ]. </td> ; echo <td>. $fila[ Titulo ]. </td> ; echo <td>. $fila[ Resumen ]. </td> ; echo <td>. $fila[ Autor ]. </td> ; echo <td>. $fila[ Categoria ]. </td> ; echo <td>. $fila[ Editorial ]. </td> ; echo <td>. $fila[ Anyo ]. </td> ; echo </table> ; // Libera la memoria ocupada por el resultado $resultado->close(); // Cierra la conexión $mysqli->close();?> </body> </html> 4.2. Uso de ADOdb ADOdb es una librería de clases para acceder a bases de datos para PHP que posee un funcionamiento similar a Microsoft ADO. ADOdb ofrece un acceso estándar a diversos SGBD, ya que oculta (encapsula) las diferencias. En la actualidad, ADOdb ofrece acceso a MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, SQLite, Interbase (Firebird y las variantes de Borland), Microsoft Foxpro, Microsoft Access, ADO, IBM DB2, SAP DB y ODBC. Las clases principales que se emplean en ADOdb son ADOConnection y ADORecordSet. La clase ADOConnection posee las siguientes propiedades y métodos principales: Close(): cierra la conexión y libera toda la memoria y recursos ocupados. Connect(servidor, usuario, contraseña, basedatos): abre una conexión con una base de datos. ErrorMsg(): devuelve una descripción del último error. ErrorNo(): devuelve el código del último error o 0 si no ha habido error. Execute(sentencia): ejecuta una sentencia SQL y devuelve un objeto ADORecordSet. La clase ADORecordSet posee las siguientes propiedades y métodos principales: Close(): cierra el resultado y libera toda la memoria y recursos ocupados. EOF: devuelve true si el cursor interno ha superado la última fila del resultado y false en caso contrario. FieldCount(): devuelve el número de campos (columnas) en un resultado. fields: array que contiene la fila actual. 5

GetRows(): devuelve todas las filas del resultado en forma de array bidimensional. MoveFirst(): mueve el cursor interno a la primera fila en el resultado. MoveNext(): mueve el cursor interno a la última fila en el resultado. RecordCount(): devuelve el número de filas en un resultado. Para usar ADOdb en PHP es necesario incluir en el código el fichero adodb.inc.php en cada página donde se vaya a utilizar. Si emplea la directiva include_path del fichero php.ini, se puede evitar el tener que copiar los ficheros de ADOdb en cada sitio web o emplear rutas de acceso complicadas. La directiva include_path permite definir una lista de directorios donde las funciones require(), include(), fopen(), file(), readfile() y file_get_contents() buscarán los ficheros. Por ejemplo, en XAMPP la directiva include_path está configurada como.;c:\xampp\php\pear\. El siguiente ejemplo muestra como realizar un acceso básico a una base de datos mediante ADOdb; para crear una conexión con la base de datos se puede emplear tanto NewADOConnection(driver) como ADONewConnection(driver), ya que ambos son sinónimos; en este ejemplo se ha activado la propiedad debug para mostrar información de depuración (como por ejemplo, la sentencia SQL que se ejecuta) y se emplea GetRows() para obtener todo el resultado en forma de array bidimensional que se imprime directamente con la función print_r(): <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>prueba básica con ADOdb</title> </head> <body> <?php include_once adodb/adodb.inc.php ; $con = NewADOConnection( mysql ); $con->debug = true; $con->connect( localhost, // El servidor wwwdata, // El usuario, // La contraseña biblioteca ); // La base de datos // Ejecuta una sentencia SQL $sentencia = SELECT * FROM libros ; $resultado = $con->execute($sentencia); echo "<pre>"; print_r($resultado->getrows()); echo "</pre>"; $resultado->close(); // Opcional $con->close(); // Opcional?> </body> </html> El siguiente ejemplo, un poco más elaborado, muestra en forma de tabla HTML el resultado de ejecutar una sentencia SQL; para ello recorre fila a fila y columna a columna el resultado: <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> 6

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>prueba de SELECT con ADOdb</title> </head> <body> <?php include_once adodb/adodb.inc.php ; $con = NewADOConnection( mysql ); $con->connect( localhost, // El servidor wwwdata, // El usuario, // La contraseña biblioteca ); // La base de datos // Ejecuta una sentencia SQL $sentencia = SELECT * FROM libros ; $resultado = $con->execute($sentencia); echo <table><tr> ; echo <th>idlibro</th><th>título</th><th>resumen</th> ; echo <th>autor</th><th>categoría</th><th>editorial</th><th>anyo</th> ; // Recorre el resultado y lo muestra en forma de tabla HTML while(!$resultado->eof) { echo <tr> ; echo <td>. $resultado->fields[ IdLibro ]. </td> ; echo <td>. $resultado->fields[ Titulo ]. </td> ; echo <td>. $resultado->fields[ Resumen ]. </td> ; echo <td>. $resultado->fields[ Autor ]. </td> ; echo <td>. $resultado->fields[ Categoria ]. </td> ; echo <td>. $resultado->fields[ Editorial ]. </td> ; echo <td>. $resultado->fields[ Anyo ]. </td> ; $resultado->movenext(); echo </table> ; $resultado->close(); // Opcional $con->close(); // Opcional?> </body> </html> 5. Recomendaciones Existen distintas formas de acceder a una base de datos desde PHP, todas ellas con sus ventajas y desventajas. Intenta conocerlas todas y utiliza la que más te guste. PHP ofrece tres APIs diferentes para conectarse a MySQL 10. En la Figura 2 se muestra una comparativa de mysqli, PDO_MySQL y mysql Se recomienda usar las extensiones mysqli o PDO_MySQL. No se recomienda usar la antigua extensión mysql para nuevos desarrollos, ya que se considera obsoleta y no se desarrollan nuevas funcionalidades para ella, sólo se mantiene. Recuerda que el acceso nativo (mediante las funciones específicas que proporciona PHP) es el método más rápido y el que ofrece el acceso a todas las funcionalidades del SGBD. Cuando se utiliza una capa intermedia, como ADOdb u ODBC, el acceso es más lento y ciertas características quizás no estén disponibles. 10 http://es2.php.net/manual/es/mysqlinfo.api.choosing.php 7

Figura 2: Comparativa mysqli, PDO_MySQL y mysql 8