Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se...

26
title: Clase 2 Proyecto 2017 Author: Einar Lanfranco, Claudia Banchoff description: Acceso a BBDD usando PHP + Modelo MVC + Objetos en PHP keywords: base de datos css: proyecto.css Proyecto de Software Cursada 2017 data-rotate: 270 Hoy seguimos con ... Temario • Repaso Clase Anterior • PHP • Servidor • Sesiones • Cookies

Transcript of Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se...

Page 1: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

title: Clase 2 Proyecto 2017

Author: Einar Lanfranco, Claudia Banchoff

description: Acceso a BBDD usando PHP + Modelo MVC + Objetos en PHP

keywords: base de datos

css: proyecto.css

Proyecto de Software

Cursada 2017data-rotate: 270

Hoy seguimos con ...

Temario

• Repaso Clase Anterior

• PHP

• Servidor

• Sesiones

• Cookies

Page 2: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• BBDD

• Objetos

Primero un repaso

Repaso: Estilos

• Permiten definir los aspectos de visualización

• Ejemplo: proyecto.css

Repaso: Estilos

Importante

• Utilizar los elementos HTML según el objetivo para lo que fueron creados.

• Usar HTML para la estructura del documento y CSS para la visualización.

• Usar validadores para revisar estándares.

Page 3: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Server Side

Páginas web

• Estáticas

• Sólo HTML + CSS

• Dinámicas

• Con programación en el cliente

• Scripts Javascript, etc.

• Con programación en el servidor

• Programación CGI/FastCGI

• Lenguajes de script “server-side”: PHP, Ruby, Perl, Python, Java, etc.

Page 4: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Servidores Web

https://news.netcraft.com/archives/category/web-server-survey/

Servidores Web - Pero....

https://news.netcraft.com/archives/2017/07/20/july-2017-web-server-survey.html#more-25445

Procesamiento en el servidorExisten varias alternativas...

• CGI “Comon Gateway Interface”.

• FastCGI.

• SAPIs (Server Application Programming Interface)

• Lenguajes de Script.

CGI – RFC 3875El programa recibe sus datos de la entrada estándar (stdin) a través del CGI

Page 5: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• Ventajas

• Simple, se puede usar cualquier lenguaje.

• Desventajas

• Sobrecarga en la creación de procesos.

• Problemas de seguridad y portabilidad.

Fast-CGI

• Plantea una mejora a CGI.

• Nace para mejorar problemas de performance de CGI.

SAPIs

• Extienden la funcionalidad del servidor.

• Ejemplo: ISAPI/ Módulos Apache

• Ventajas

• Mayor performance

• Desventajas

• Dependientes del servidor

Herramientas

¿Qué necesitamos para arrancar?

• Servidor web: Apache/Nginx

• Intérprete PHP

• La base de datos: MariaDB (- MySQL)

Page 6: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• Algunas soluciones:

• Soluciones LAMP/WAMP: Linux/Windows - Apache - MariaDB - PHP/Perl/Python....

• Soluciones LEMP: Nginx x Apache

• Algunas herramientas:

• EasyPHP

• XAMPP

• etc...

Nosotros, ¿qué vamos a usar?

• Lenguaje: PHP 5.6.30

• Servidor Web: Apache 2.4.10

• Servidor de Base de Datos: MariaDB 10.0.32

Algunas configuraciones en el servidor web

• ServerRoot: Indica dónde se encuentra instalado servidor web y a partir de ahí los archivos deconfiguración, de logs, etc.

• Listen: Puerto donde se atenderán las peticiones. Por defecto se utiliza el puerto 80 de TCP.También permite especificar qué direcciones IP se utilizarán (por si el servidor tuviese más de una).Ejemplo: Listen 12.12.22.12:80

Algunas configuraciones en el servidor web

• DocumentRoot o root: Directorio raíz de nuestro sitio. Generalmente se encuentra en archivodefault u otro nombre en el directorio "sites-available".

• DirectoryIndex o index: Permite indicar qué página se cargará por defecto en el caso de que no seespecifique ninguna en la URL.

• ErrorDocument: establece la configuración del servidor en caso de error.

PHP

Hypertext Pre-Procesor

Page 7: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Características generales

• PHP es un lenguaje de scripting de propósito general que tiene una gran comunidad de usuarios.

• Se utiliza especialmente para aplicaciones web pero puede utilizarse para desarrollar cualquier tipode aplicación (ver ejemplosClase2/comocli.php)

• Es interpretado.

• Es open source distribuido bajo una licencia libre similar a la de BSD, la PHP License v3.01.

• Website: http://php.net/

• ¿PHP 5 o PHP 7?

• Ver en https://www.proyecto2017.linti.unlp.edu.ar/

PHP en aplicaciones web

• Es server-side.

• Los scripts están embebidos en el código HTML.

• Permite construir páginas dinámicas según la solicitud del cliente y según la información disponibleen el servidor.

• Se puede correr con la mayoría de los servidores web conocidos (como CGI/FastCGI/FPM/módulodel servidor).

• Es independiente de la plataforma donde corre.

• Tiene un soporte muy amplio para base de datos.

• Provee soporte para programación orientada a objetos.

PHP en aplicaciones web

http://w3techs.com/technologies/overview/programming_language/all

Page 8: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

PHP en aplicaciones web

Modelo de ejecución

Configuración: php.ini

• Se lee cuando arranca PHP.

• Algunas opciones se pueden modificar usando la función ini_set.

• La localización por defecto de php.ini es definida en tiempo de compilación.

• Algunas consideraciones:

• Las líneas que comienzan con ; se ignoran.

• [php] delimitan una sección – también ignorado.

• Los valores lógicos son: true, on, yes, false, off, no, none.

• Ejemplo:

• register_globals = off

• track_errors = yes

php.ini

• Mostrar los errores al cliente:

• display_errors = On

• ¿Qué errores mostrar?

Page 9: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• error_reporting = E_ALL | E_STRICTNota: E_STRICT Antes de PHP 5.4 no estaba en E_ALL

php.ini

• Mostrar los errores al arranque:

• display_startup_errors = On

• Poner los errores en un archivo:

• log_errors = On

• error_log = php_errors.logMás info: http://www.php.net/manual/en/errorfunc.configuration.php

Mi primer script PHP

PHP: Lo básico

• Existen constantes predefinidas:

• PHP_VERSION: la versión de PHP utilizada.

• PHP_OS: el sistema operativo sobre el cual se está ejecutando PHP

• etc.

Page 10: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• Variables predefinidas (superglobals)

• $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIES, $_REQUEST, $_SESSION, etc.

• Ejemplo: Para obtener DOCUMENT_ROOT se usará $_SERVER['DOCUMENT_ROOT']

Variables externasEjemplo: Acceso a los campos de un formulario.

<form method="get" action="proceso_formu.php"> <label for="nombre">Nombre</label> <input type="text" name="nombre"> <label for="apellido">Apellido</label> <input type="text" name="apellido"> <label for="turno">Turno de teoría:</label> <select name="turno"> <option>Martes</option> <option>Viernes</option> </select> <input type="submit" value="Enviar"></form>

$_REQUEST, $_GET, $POSTVeamos el ejemplo1:

class: destacado

$_REQUEST, $_GET, $POSTUsemos las variables externas adecuadas según los requerimientos de la aplicación.

Include y require

• include() y require(): Permiten incluir y evaluar un archivo dentro de un script.

• Si la inclusión ocurre dentro de una función, todo el código contenido en el archivo incluido secomportará como si hubiese sido definido dentro de esta función.

• Cuando se incluye un archivo, el intérprete sale del modo PHP y entra en modo HTML al principiodel archivo referenciado, y vuelve de nuevo al modo PHP al final.

• La diferencia entre estas dos funciones es que include() produce un warning mientras que require()produce un error fatal.

• requiere_once(), include_once()

Page 11: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Veamos un ejemplos de include y de include once

Cookies

• Básicamente, son “tokens” en el requerimiento HTTP que permite identificar de alguna manera alcliente en el servidor.

• Se almacenan en el cliente.

• Muy usado por ser HTTP un protocolo sin estado.

• Formato: nombreCookie=valor;expires=fecha;

• PHP las considera variables externas: Usa $_COOKIE (un arreglo con las cookies generadas).

• Mediante la función setcookie() es posible grabar cookies en el cliente.

• Veamos un ejemplo de uso de cookies

class: destacado

SesionesEs un mecanismo para conservar ciertos datos a lo largo de varios accesos.

• Permite registrar un número arbitrario de variables que se conservarán en las siguientes peticiones.

• Identificador: A cada visitante se le asigna un identificador único, llamado session id (identificadorde sesión).

• Hay dos formas de propagar un identificador de sesión:

• Mediante cookies

• A través de la URL.

Sesiones

• Algunas funciones:

• session_start(): Inicializa los datos de una sesión.

• session_destroy(): Destruye los datos guardados en una sesión.

• session_id(): recupera o modifica el valor de la sesión.

• Debe ubicarse antes que cualquier salida al browser.

• Si no existe un session ID, session_start() lo crea e inicializa un arreglo vacío denominado$_SESSION.

Sesiones

Page 12: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• Los archivos con los datos de la sesión se generan en el servidor.

• El cliente sólo guarda el session Id

Veamos el ejemplo de sesiones

POO en PHP

• PHP tiene soporte para construir clases.

• Es posible definir clases en una jerarquía con herencia simple.

• Palabra reservada class

Clases

• Clase Archivo:

<?php class Archivo{ // variables de instancia // métodos }

• Clase Archivo gráfico que hereda de Archivo:

<?php class ArchivoGrafico extends Archivo{ }

Constructores

• Constructores: En PHP 5 estas funciones se llaman __construct(). Aunque por compatibilidad conversiones anteriores, si no se encuentra esta función se busca una cuyo nombre sea igual al de laclase.

Page 13: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Constructores

Destructores:

• Cuando se destruye la última referencia a un objeto, se invoca el método “destructor” de ese objeto.

• Este método se llama __destruct() y no recibe parámetros.

• Al igual que en el caso de los constructores, los métodos destructores de un objeto NO invocanautomáticamente los destructores de las clase base. Deben invocarse explícitamente:parent::__destruct() en el cuerpo del método.

Instancias de una claseOperador new:

$x = new nombreDeLaClase();

<?phpclass Persona { protected $nombre; public $dni; function verNombre(){ return $this->nombre; } }$per1=new Persona();$per2=new Persona();$per1->verNombre();$per2->dni=$per1->dni;?>

Ejemplo de clase en PHPVer clases

id: alcance

Page 14: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Visibilidad de las propiedades

• Público: Los miembros de clases declarados como public pueden ser accedidos desde cualquierlado

• Privado: Aquellos miembros definidos como private, únicamente pueden ser accedidos desde laclase que los definió.

• Protegido: Los miembros declarados como protected, sólo desde la misma clase, desde las clasesque hereden de ella y desde las clases parent.

Ejemplo:

• http://php.net/manual/es/language.oop5.visibility.php

Varios

• Operador instanceof

<?php if ( $emple instanceof Empleado ) { echo "Esto es un empleado";} ?>

(::) Resolución de AlcanceAlgunas veces es útil hacer referencia a funciones y variables en las clases base o hacer referenciaa funciones que se encuentran en clases que aún no tienen ninguna instancia. El operador :: esutilizado para realizar esto.

Page 15: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Enlace estático en tiempo de ejecución

• Permite hacer referencias a la clase en uso dentro de un contexto de herencia estática

• Enlaces estáticos parent, self y static. Ver Ejemplo

• Referencia: http://php.net/manual/es/language.oop5.late-static-bindings.php

Miembros static

• Una propiedad declarada como static no puede ser accedida con un objeto de la clase. Sí a travésde métodos estáticos.

Ejemplo de uso static en propiedades

• Ver fuente

Métodos abstractos

• Un método es abstracto si sólo declara el prototipo del método y no su implementación.

• Cuando se hereda de una clase abstracta, todos los métodos definidos como abstractos en ladeclaración de la clase madre deben ser definidos en la clase hija, y con una visibilidad igual omenor.

Clases Abstractas

• No tienen instancias.

• Es cualquier clase que contenga aunque sea un método abstracto.

Page 16: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Abstractos e implementaciones

• Ver Abstracciones

Interfaces

• Son estructuras similares a las clases abstractas.

• Pueden contener sólo métodos abstractos, ninguna implementación.

• Suelen verse como catálogos de métodos a implementar.

<?phpinterface unaInterface { function unMetodo( );}?>

• Equivalente a:

<?phpinterface unaInterface { public abstract function unMetodo( );}?>

Interfaces (Cont.)

• Una clase puede implementar una o más interfaces.

• Debe proveer una implementación para todos los métodos definidos en la interface.

<?php class MiClase extends ClaseBase implements unaInterface {//...}class MiClase implements unaInterface , otraInterface { //...}class OtraClase implements unaInterface {//...}?>

Page 17: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Polimorfismo

• Distintos objetos comparten la misma interfaz y en ejecución se determina el código a ejecutar,dependiendo del contexto. No importa cómo lo implementa cada uno.

<?php$objetos=array(new Clase1(), new Clase2(), new Clase3());foreach ($objetos as $unObj){ $unObj->metodoComun(); //redefinido para cada clase //...}?>

Excepciones

• Existe una clase Exception

• Es posible levantar una excepción explícitamente:

• throw new Exception( "my message", 44 );

• Finaliza la ejecución del método y deja disponible el objeto Exception

• Por defecto produce un error fatal

• Para manejar las excepciones implementa un mecanismo try/catch

• Cualquier código que pueda levantar una excepción debe estar encerrado dentro de unacláusula try

• El bloque catch se utiliza para manejar la excepción

Excepciones

<?phptry {-- sentencias que pueden producir una excepción --}catch (Exception $e) {-- sentencias para manejar la excepción --}?>

Ver excepciones y excepcionesNuevas

Page 18: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Accediendo a Bases de Datos

Lenguaje SQL (Structured Query Language)

• Sentencias insert, update, select, etc....

• Ejemplos:

• select * from tabla where condición

• insert into tabla (campos) values (valores)

• update tabla set campo1='valor1' where condición

Pasos típicos

<?php//Conectarse a la BBDD$con = conectar_a_la_BBDD("mibdd","usuario", "clave");

// Armar la consulta$consulta = "SELECT * FROM AlgunaTabla where campo1 ='".$variable."'";

//Ejecutar la consulta$resultado = ejecutar_consulta($consulta);

//Procesar resultadosif (tengo_resultados($resultado) $campo =extraigo_datos($resultado,"nombreCampo");?>

Importante

MySQL: Motor de Base de Datos

SQL: Lenguaje de Consulta

Page 19: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Consejos

• Habilitar los logs de la manera más descriptiva posible

• Instalar alguna aplicación que nos permita acceder de manera menos complicada a la base de datos→ PhpMyAdmin

MySQL

• El archivo más importante de MySQL es su configuración que la encontramos en /etc/mysql/my.cnf

• Por defecto el log esta deshabilitado por cuestiones de performance.

• Ejemplos de configuración avanzados: /usr/share/doc/mysql-server-5.1/examples

MySQLHabilitar el Log de todas las transacciones:

• general_log_file = /var/log/mysql/mysql.log

• general_log = 1

Loguear consultas lentas y sin índices:

• log_slow_queries = /var/log/mysql/mysql-slow.log

• long_query_time = 2

• log-queries-not-using-indexes

PhpMyAdmin

• Interfaz de Administración de la Base de Datos MySQL

• Podemos exportar e importar a varios formatos

http://www.phpmyadmin.net

Page 20: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

class: destacado

Acceso a MySQL con PHPEsto es histórico: la extensión MySQL fue declarada obsoleta en PHP 5.5.0 y eliminada en PHP 7.0.0.

• Tipos de recursos: Hay dos tipos de recursos usados en el módulo MySQL.

• El identificador de enlace para una conexión de base de datos

• Un recurso que almacena el resultado de una consulta.

Acceso a MySQL con PHP (cont.)

• Algunas funciones....

• mysql_connect(): Conecta a una base de datos

• mysql_select_db: Permite seleccionar una base de datos

• mysql_query(): Envía una sentencia SQL a MySQL

• mysql_fetch_row(): Busca un registro en el resultado

• mysql_result(): Devuelve los resultados de una consulta

Acceso a BBDD – MySQL

• La extensión mysqli y PDO son las opciones recomendadas actualmente que nos permite acceder ala funcionalidad provista por MySQL 4.1.2 o superior.

• Ver: http://php.net/manual/es/mysqlinfo.api.choosing.php

Mysqli

• La extensión mysqli (mysql improved) permite acceder a la funcionalidad proporcionada por MySQL4.1 y posterior.

Page 21: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• Puede utilizarse en forma procedimental y como objetos.

• Ver formas de utilizarlo en http://www.php.net/manual/es/mysqli.construct.php

Proceduralmente

<?php//conection:$link = mysqli_connect($db_host,$db_user,$db_pass,$db_base) or die("Error " . mysqli_error($link));//consultation:$query = "SELECT nombre FROM usuarios" ;//execute the query.$result = $link->query($query) or die("Error en la consulta: " . mysqli_error($link));//display information:while($row = mysqli_fetch_array($result)) { echo $row["nombre"] . "<br>";}mysqli_close($link);?>

Acceso a la Base con mysqliVer accediendo

Objetos

<?php//conection:$con = new mysqli($db_host,$db_user,$db_pass);$con->select_db($db_base);//consultation:$query = "SELECT nombre FROM usuarios");//execute the query.$result = $con->query($query);//display information:while($row = $result->fetch_object()) { echo $row->nombre . "<br>";}$result->close();?>

id: motores-db

Page 22: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Más Motores

CUBRID DB++ dBase filePro SQLite

Paradox FrontBase IBM DB2 Informix Sybase

Ingres MaxDB MongoDB mSQL PostgreSQL

Microsoft SQL Server MySQL Oracle OCI8 Ovrimos SQL Firebird/InterBase

WE HAVE A PROBLEM!!

• ¿Qué pasa si queremos migrar de motor de BDD?

• ¿Qué pasa si queremos tener múltiples BDD conectadas?

Abstrayéndonos → Otra opción PDO

• La extensión Objetos de Datos de PHP (PDO por sus siglás en inglés) define un interfaz ligera parapoder acceder a bases de datos en PHP.

• Hay que usar un controlador de PDO específico para cada servidor de base de datos.

Page 23: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• PDO proporciona una capa de abstracción de acceso a datos, lo que significa que,independientemente de la base de datos que se esté utilizando, se usan las mismas funciones pararealizar consultas y obtener datos → Permitiría cambiar de motor de base de datos.

• Ver drivers

Con PDO

<?phptry { $gbd = new PDO('mysql:host=localhost;dbname=test', $usuario, $pass); foreach($gbd->query('SELECT * from FOO') as $fila) { print_r($fila);} $gbd = null;} catch (PDOException $e) { print "¡Error!: " . $e->getMessage() . "<br/>"; die();}?>

Con PDO ejemplo 2

<?php$status=$_GET["status"];try { $cn = new PDO("mysql:dbname=base;host=localhost","user","pass"); $query = $cn->prepare("SELECT * FROM usuarios WHERE status=?"); $query->execute(array($status)); while($row = $query->fetch()) { echo $row['nombre']; } }catch(PDOException $e){ echo "ERROR". $e->getMessage();}?>

Cierre de conexiones en PDO

• Una vez realizada con éxito una conexión a la base de datos, será devuelta una instancia de laclase PDO al script.

• La conexión permanecerá activa durante el tiempo de vida del objeto PDO.

Page 24: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

• Para cerrar la conexión, es necesario destruir el objeto asegurándose de que todas las referencias aél existentes sean eliminadas (esto se puede hacer asignando NULL a la variable que contiene elobjeto).

• Si no se realiza explícitamente, PHP cerrará automáticamente la conexión cuando el script finalice.

Ver ejemplo con pase de parámetro

Ver

En general

• http://php.net/manual/es/class.pdostatement.php

• http://php.net/manual/es/book.mysqli.php

Comparando

• A mayor abstracción menos control .

• Al abstraernos es posible que se compliquen algunas funciones propias del motor que queremosusar.

• ¿La abstracción es necesaria?

• Menos control con PDO que con mysqli.

• Algunas bases no están disponibles con PDO y hay que usar si o si el dirver específico. Verhttp://www.php.net/manual/es/pdo.drivers.php

Una vuelta de rosca más->ORM

Page 25: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

ORM - Object-Relational Mapping

• Mapeo de Objetos a Base de Datos Relacionales.

• Permite acceder a una base de datos relacional como si fuera orientada a objetos.

• Transforma las llamadas a los objetos en consultas SQL, que permiten independizar el motor de BDutilizado en la aplicación.

• De acuerdo a la implementación se utiliza una sintaxis diferente.

¿Por qué?

• BBDD relacionales

• Datos escalares: números, cadenas de texto,etc…

• Aplicaciones orientadas a objetos

• Objetos con propiedades y métodos

• ¿Problema?

• Convertir los objetos en datos escalares para grabar los datos en la Base de Datos yvolver a convertirlos en objetos al recuperarlos.

ORM

• Ventajas

• Abstracción a la BBDD

• Reutilización de código

• Desventajas

• Otra capa intermedia

• Otro lenguaje de consulta

• Algunos ORMs

• Propel

• Doctrine

• LinQ

• Active Record

Page 26: Proyecto de Software Cursada 2017 Hoy seguimos con · 2017-09-11 · • Ventajas • Simple, se puede usar cualquier lenguaje. • Desventajas • Sobrecarga en la creación de procesos.

Referencias

• PHP -> http://php.net

• PhpMyAdmin -> http://www.phpmyadmin.net

• Lenguaje SQL -> http://www.w3schools.com/sql/default.asp

• MySQL -> http://dev.mysql.com/doc/

• PDO -> http://www.php.net/manual/es/class.pdostatement.php

• Mysqli -> http://php.net/manual/es/mysqli.prepare.php