2 PHP
PHP. Guía 5 3 Facultad: Ingeniería Escuela: Computación Asignatura: PHP Tema: MAPEO OBJETO RELACIONAL (ORM) - ADODB Contenidos En esta práctica se abordan una serie conceptos y scripts en PHP para poner en práctica un ORM utilizando la librería ADODB para php5, el cual nos permite realizar las actividades de insertar, modificar y eliminar (CRUD acrónimo) sin importar el gestor de base de datos. Objetivo Específico Desarrollar scripts en PHP utilizando el enfoque de programación orientada a objetos. Crear scripts en PHP para realizar múltiples conexiones a diferentes bases de datos. Crear scripts en PHP utilizando la librería ADODB para realizar las operaciones de insertar, modificar, eliminar y consultar datos en un DBMS. Materiales y Equipo Editor de Texto Navegador Web Firefox o Google Chrome WampServer
4 PHP, Guía 5 Introducción Teórica Qué es ORM? Es una técnica de programación que nos permite vincular los objetos usados en nuestro modelo de la aplicación con una base de datos relacional. El principal problema surge porque hoy en día, prácticamente todas las aplicaciones están diseñadas para usar la Orientación a Objetos (POO), mientras que las bases de datos más extendidas son del tipo relacional. Las bases de datos relacionales solo permiten guardar tipos de datos primitivos (enteros, cadenas de texto, etc ) por lo que no se puede guardar de forma directa los objetos de la aplicación en las tablas, sino que estos se deben de convertir antes en registros, que por lo general afectan a varias tablas. En el momento de volver a recuperar los datos, hay que hacer el proceso contrario, se deben convertir los registros en objetos. Es entonces cuando ORM cobra importancia, ya que se encarga de forma automática de convertir los objetos en registros y viceversa, simulando así tener una base de datos orientada a objetos. Por qué usar ORM? 1. Rapidez de desarrollo. La mayoría de las herramientas ORM disponibles, permiten la creación del modelo a través del esquema de la base de datos, es decir, tú creas la base de datos y la herramienta automáticamente lee el esquema de tablas y relaciones y crea un modelo ajustado. 2. Abstracción del motor a base de datos. Todo sistema ORM que se precie debe de generar de forma automática las consultas a la base de datos para convertir los registros en objetos (y viceversa) y éstas deben poder adaptarse a los distintos proveedores (MySql, Oracle, PostreSQL, etc ). Esto permitirá a los desarrolladores tener una preocupación menos a la hora de comenzar un proyecto, ya que tienen la seguridad de que un cambio drástico en el proveedor de base de datos, no impactará para nada en el tiempo de vida del proyecto. 3. Lenguaje propio para consultas a la base de datos. Otra característica importante (de hecho seguramente la que más) es la exposición de clases y métodos que nos dan las herramientas ORM para poder extraer los datos de la forma que necesitemos (filtros, ordenaciones, agrupaciones).
PHP. Guía 5 5 Qué es ADODB? AdoDB es una librería de conexión a base de datos en el lenguaje PHP. Mediante el uso de AdoDB se consigue un uso de funciones estándar para acceso a la funcionalidad de las bases de datos soportadas por AdoDB. Actualmente soporta MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, SQLite, Interbase (versiones de Firebird y Borland), Foxpro, Access, ADO, DB2, SAP DB and ODBC. La funcionalidad básica de operaciones relacionales de base de datos como son Select, Insert y Update puede fácilmente ser usadas mediante esta librería. Entre sus características más avanzadas tenemos: paginación de resultados, gestión de transacciones y monitorización de rendimiento. Funciones a utilizar Nombre Función NewADOConnection Connect AutoExecute Explicacion Esta función permite poder cargar las funciones que brinda php para cualquier gestor de base de datos. $obj_db_mysql = NewADOConnection('mysqli'); Para toda conexión a un servidor de base de datos, necesitamos 4 información básica: dirección del servidor, usuario, contraseña y nombre de la base de datos o instancia. Por tanto la función Connect recibe esos parámetros para realizar esa conexión. $conectar_mysql = $obj_db_mysql- >Connect([SERVIDOR:PUERTO], [USUARIO],[PASSWORD], [NOMBRE_BD]); La librería ADODB nos brinda una función más fácil para realizar las operaciones DML de Insertar y Modificar. $bandera_insertar = $obj_db_mysql- >AutoExecute([NOMBRE_TABLA],[ARRAY_ASOCIATIVO_ DATOS], 'INSERT'); $bandera_modificar = $obj_db_mysql- >AutoExecute([NOMBRE_TABLA], [ARRAY_ASOCIATIVO_DATOS], 'UPDATE', [CONDICIONES]);
6 PHP, Guía 5 El ARRAY_ASOCIATIVOS_DATOS debe estar compuesto por el nombre del campo de la tabla a insertar o modificar y agregar el valor. Execute ErrorMsg GetMenu RecordCount Función que nos permite ejecutar cualquier tipo de instrucción SQL al gestor de base de datos. $consulta_general = 'select * from persona'; $record_consulta=$obj_db_mysql- >Execute($consulta_general); Función que muestra el error que devuelve el DBMS posterior a la ejecución de cualquier operación tanto DDL o DML. Función que permite crear un combo box a partir de una consulta SQL. $consulta_general = 'select apellidos,idpersona from persona'; $record_consulta = $obj_db_mysql- >Execute($consulta_general); Echo $record_consulta- >GetMenu(NOMBRE_COMBO,VALOR_SELECCIONADO, PRIMER_ELEMENTO,MULTIPLE,TAMAÑO,ELEMENTOS_A DICIONALES); 1. NOMBRE_COMBO (string): Nombre del combo a crear. 2. VALOR_SELECCIONADO (string): Sera el valor que por default se va a seleccionar al momento de crear el combo. 3. PRIMER_ ELEMENTO (boolean): Si se coloca el valor como true, el primer elemento del combo será un valor en blanco de lo contrario el primer elemento será el que muestre la consulta. Por default es true. 4. MULTIPLE (boolean): Permite crear un listbox o un combo box. Por default es false por lo tanto creara un combo box. 5. TAMAÑO (integer): Un valor entero del tamaño de lista. 6. ELEMENTOS_ADICIONALES: Se pueden agregar estilos css, alguna función en javascript u algún otro atributo a la etiquete <select>. Permite saber el total de registros que arrojara una consulta posterior a su ejecución:
PHP. Guía 5 7 $consulta_general = 'select * from persona'; $record_consulta = $obj_db_mysql- >Execute($consulta_general); $total_registros = $record_consulta->recordcount(); Instalación de ADODB Primero debemos descargar la librería de la siguiente dirección: http://adodb.sourceforge.net/#download Ejercicios Prácticos 1. Abrir conexión y cerrar para gestores como: MySql, PostgreSQL y Oracle con ADODB. Antes de ejecutar el siguiente código, verifique que las extensiones: php_oci8_11g.dll y extension=php_pgsql.dll estén habilitadas en el archivo PHP.ini $obj_db_mysql $conectar_mysql = NewADOConnection('mysqli'); = @$obj_db_mysql->connect("localhost:3306", "root", "", "db_guia10"); echo "<font color='green'><b>se CONECTA PERFECTAMENTE A MYSQL</b></font><br>"; echo "<font color='red'><b>no SE CONECTA A MYSQL</b></font><br>"; $obj_db_pgsql $conectar_pgsql = NewADOConnection('postgres9'); = @$obj_db_pgsql->connect("localhost:5432", "postgres", "clave", "db_guia"); if($conectar_pgsql): echo "<font color='green'><b>se CONECTA PERFECTAMENTE A POSTGRESQL 9.0</b></font><br>"; echo "<font color='red'><b>no SE CONECTA A POSTGRESQL 9.0</b></font><br>"; $obj_db_oracle $conectar_oracle "orcl"); = NewADOConnection('oci8'); = @$obj_db_oracle->connect('localhost:1521', "usr_guia10", "clave", if($conectar_oracle):
8 PHP, Guía 5 echo "<font color='green'><b>se CONECTA PERFECTAMENTE A ORACLE 11G</b></font><br>"; echo "<font color='red'><b>no SE CONECTA A ORACLE 11G</b></font><br>"; 2. Ingresar un nuevo registro. $obj_db_mysql $conectar_mysql = NewADOConnection('mysqli'); = @$obj_db_mysql->connect("localhost:3306", "root", "", "db_guia10"); $datos_persona['dui'] = '036562501'; $datos_persona['nit'] = '06141112861283'; $datos_persona['nombres'] = 'edwin leonardo'; $datos_persona['apellidos'] = 'figueroa huezo'; $datos_persona['sexo'] = 'm'; $datos_persona['fecha_nacimiento'] = '1986-12-11'; $datos_persona['edad'] = '27'; $bandera_insertar = $obj_db_mysql->autoexecute('persona', $datos_persona, 'INSERT'); if($bandera_insertar): echo "<font color='green'><b>se INGRESO CORRECTAMENTE LA INFORMACION</b></font><br>"; echo "<font color='red'><b>error AL INSERTAR: ".$obj_db_mysql- echo "<font color='red'><b>error CONEXION: ".$obj_db_mysql- Intente de nuevo ejecutar el código anterior y verifique los errores que se muestran en pantalla. Verifique el nuevo registro de la aplicación de PHPMyAdmin. 3. Modificar un registro. $obj_db_mysql = NewADOConnection('mysqli'); $conectar_mysql = @$obj_db_mysql->connect("localhost:3306", "root", "", "db_guia10");
PHP. Guía 5 9 $datos_persona['dui'] = '036562500'; $datos_persona['fecha_nacimiento'] = '1986-01-11'; $datos_persona['edad'] = '28'; $bandera_modificar = $obj_db_mysql->autoexecute('persona', $datos_persona, 'UPDATE', 'idpersona = 1'); if($bandera_modificar): echo "<font color='green'><b>se MODIFICO CORRECTAMENTE LA INFORMACION</b></font><br>"; echo "<font color='red'><b>error AL MODIFICAR: ".$obj_db_mysql- echo "<font color='red'><b>error CONEXION: ".$obj_db_mysql- Verifique el nuevo registro de la aplicación de PHPMyAdmin. 4. Eliminar un registro. $obj_db_mysql $conectar_mysql = NewADOConnection('mysqli'); = @$obj_db_mysql->connect("localhost:3306", "root", "", "db_guia10"); $consulta_eliminar $bandera_eliminar = 'delete from persona where idpersona = 1'; = $obj_db_mysql->execute($consulta_eliminar); if($bandera_eliminar): echo "<font color='green'><b>se ELIMINO CORRECTAMENTE LA INFORMACION</b></font><br>"; echo "<font color='red'><b>error AL ELIMINAR: ".$obj_db_mysql- echo "<font color='red'><b>error CONEXION: ".$obj_db_mysql-
10 PHP, Guía 5 5. Consultar una tabla. $obj_db_mysql $conectar_mysql = NewADOConnection('mysqli'); = @$obj_db_mysql->connect("localhost:3306", "root", "", "db_guia10"); $salida_final $consulta_general $record_consulta $total_registros = (string) ''; = 'select * from persona'; = $obj_db_mysql->execute($consulta_general); = $record_consulta->recordcount(); if($record_consulta): while (!$record_consulta->eof): $idpersona = $record_consulta->fields['idpersona']; $dui = $record_consulta->fields['dui']; $nit = $record_consulta->fields['nit']; $nombres = $record_consulta->fields['nombres']; $apellidos = $record_consulta->fields['apellidos']; $sexo = $record_consulta->fields['sexo']; $fecha_nacimiento = $record_consulta->fields['fecha_nacimiento']; $edad = $record_consulta->fields['edad']; $salida = '<tr>'. '<td>'.$idpersona.'</td>'. '<td>'.$dui.'</td>'. '<td>'.$nit.'</td>'. '<td>'.$nombres.'</td>'. '<td>'.$apellidos.'</td>'. '<td>'.$sexo.'</td>'. '<td>'.$fecha_nacimiento.'</td>'. '<td>'.$edad.' años</td>'. '</tr>'; $salida_final = $salida.$salida_final; $record_consulta->movenext(); endwhile; echo '<center><table border="1">'. '<tr style="background-color:green; color:white; font-weight:bold">'. '<td>idpersona</td>'. '<td>dui</td>'. '<td>nit</td>'. '<td>nombres</td>'. '<td>apellidos</td>'. '<td>sexo</td>'. '<td>fecha NACIMIENTO</td>'. '<td>edad</td>'. '</tr>'. $salida_final. '</table></center>';
PHP. Guía 5 11 echo "TOTAL REGISTROS: ".$total_registros." PERSONAS<br>"; echo "<font color='red'><b>error AL CONSULTA LA TABLA PERSONA: ".$obj_db_mysql- echo "<font color='red'><b>error CONEXION: ".$obj_db_mysql- 6. Crear un combo box con datos consultados en la base de datos. $obj_db_mysql $conectar_mysql = NewADOConnection('mysqli'); = @$obj_db_mysql->connect("localhost:3306", "root", "", "db_guia10"); $consulta_general = 'select apellidos,idpersona from persona'; $record_consulta = $obj_db_mysql->execute($consulta_general); print $record_consulta->getmenu('cmb_info_persona'); echo "<font color='red'><b>no SE CONECTA A POSTGRESQL 9.0</b></font><br>"; Análisis de Resultados 1. Crear las respectivas pantallas para realizar las operaciones DML (Insertar, Modificar y Eliminar) para la tabla persona.
12 PHP, Guía 5 Anexos CREATE SCHEMA IF NOT EXISTS `db_guia10` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; USE `db_guia10` ; CREATE TABLE IF NOT EXISTS `persona` ( `idpersona` int(11) NOT NULL AUTO_INCREMENT, `dui` char(9) COLLATE utf8_spanish_ci NOT NULL, `nit` char(14) COLLATE utf8_spanish_ci NOT NULL, `nombres` varchar(250) COLLATE utf8_spanish_ci NOT NULL, `apellidos` varchar(250) COLLATE utf8_spanish_ci NOT NULL, `sexo` char(1) COLLATE utf8_spanish_ci NOT NULL, `fecha_nacimiento` date NOT NULL, edad int (4) NOT NULL, PRIMARY KEY (`idpersona`), UNIQUE KEY `dui` (`dui`), UNIQUE KEY `nit` (`nit`) ) ENGINE= MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1