unidad 5 - acceso a bases de datos .- version completa - mayo 2.013

21
14/05/2013 1 Acceso a Bases de Datos usando PHP Unidad 7 Objetivos de Aprendizaje Describir cómo se trabaja con bases de datos en PHP Utilizar ODBC para acceder a bases de datos Explicar cómo conectarse y desconectarse a una base de datos Explicar cómo recuperar, insertar, eliminar, y actualizar registros Utilizar la extensión de PHP para acceder bases de datos en MySQL Acceso a Bases de Datos con PHP Una Base de Datos Relacional es un conjunto de tablas que mantienen relaciones unas con otras entre sí, permitiendo almacenar información en forma íntegra y consistente. Entre las bases de datos relacionales que maneja PHP podemos mencionar MySQL, MS SQLServer, Oracle y también se usa IBM UDB/DB2. Acceso a Bases de Datos con PHP … 2 Para trabajar las bases de datos es necesario manejar un conjunto de comandos que nos van a permitir realizar operaciones como: Conexión y desconexión a la base de datos. Crear y eliminar tablas. Sentencias SQL para insertar, borrar y actualizar registros. Sentencias SQL para recuperar registros de las tablas. En PHP, dichas operaciones se realizan mediante funciones.

Upload: iskandararneodo

Post on 01-Dec-2015

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

1

Acceso a Bases de Datos usando PHP

Unidad 7

Objetivos de Aprendizaje

• Describir cómo se trabaja con bases de datos en PHP

• Utilizar ODBC para acceder a bases de datos

• Explicar cómo conectarse y desconectarse a una base de datos

• Explicar cómo recuperar, insertar, eliminar, y actualizar registros

• Utilizar la extensión de PHP para acceder bases de datos en MySQL

Acceso a Bases de Datos con PHP

• Una Base de Datos Relacional es un conjunto de tablas que mantienen relaciones unas con otras entre sí, permitiendo almacenar información en forma íntegra y consistente.

• Entre las bases de datos relacionales que maneja PHP podemos mencionar MySQL, MS SQLServer, Oracle y también se usa IBM UDB/DB2.

Acceso a Bases de Datos con PHP … 2

• Para trabajar las bases de datos es necesario manejar un conjunto de comandos que nos van a permitir realizar operaciones como:

• Conexión y desconexión a la base de datos.

• Crear y eliminar tablas.

• Sentencias SQL para insertar, borrar y actualizar registros.

• Sentencias SQL para recuperar registros de las tablas.

• En PHP, dichas operaciones se realizan mediante funciones.

Page 2: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

2

Extensiones para uso de Bases de Datos • PHP posee extensiones para manipular diferentes

bases de datos.

• Las funciones para trabajar con cada base de datos en particular están disponibles en su respectiva extensión.

• Las funciones de manejo de bases de datos poseen como prefijo el nombre del manejador de base de datos que se va utilizar.

Por ejemplo, si se trata de MySQL:

• mysql_connect(): Conectarse a la base de datos.

• mysql_db_query(): Ejecución de sentencias SQL.

Extensiones para uso de Bases de Datos • En PHP también se puede lograr el acceso a Bases

de Datos usando ODBC.

• El módulo de extensión para ODBC, viene incorporado (built-in) en PHP, por lo tanto no se requiere cargar una extensión específica para poder utilizarlo.

• Las funciones relativas a ODBC en PHP tienen el prefijo odbc.

Por ejemplo:

• odbc_connect(): Conectarse a la base de datos.

• odbc_do(): Ejecutar las consultas SQL.

ODBC (Open Database Connectivity) • ODBC es un estándar ampliamente aceptado por

Microsoft, que permite a las aplicaciones conectarse a varias bases de datos relacionales como IBM DB2 Universal Database, Oracle, etc.

• Proporciona un conjunto de APIs para acceder a datos en bases de datos relacionales.

• Este conjunto de APIs es uniforme entre las bases de datos relacionales.

Arquitectura de Aplicación ODBC

Page 3: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

3

Conexión a una Base de Datos con ODBC

• odbc_connect (dsn, userid, password)

• odbc_pconnect (dsn, userid, password)

<?

$id_conn=odbc_connect("SAMPLEDSN","db2admin","db2admin");

if ($id_conn == 0) {

echo "Falló la conexión a la base de datos!";

$sqlerror = odbc_errormsg($id_conn);

echo "$sqlerror";

} else

echo "La conexión a la base de datos fue satisfactoria!";

?>

Cerrar una conexión a Base de Datos • odbc_close(id_conn)

<?

$id_conn=odbc_connect(“SAMPLEDSN”,”db2admin”,”password.1”);

if ($id_conn == 0) {

echo "Falló la Conexión a Base de Datos!";

$sqlerror = odbc_errormsg($id_conn);

echo"$sqlerror";

}

else {

odbc_close($id_conn); //Cerrando la conexión }

?>

Ejecutar Sentencias SQL

• Sentencias Insert

• Sentencias Delete

• Sentencias Update

• Sentencias Select

Ejecutar Sentencias SQL ... 2 • Para ejecutar una sentencia SQL se utilizan las

funciones:

• odbc_do (id_conn,sentencia_SQL)

• odbc_exec(id_conn,sentencia_SQL)

• Alternativamente, se pueden utilizar las funciones:

• odbc_prepare (id_conn, sentencia_SQL)

• odbc_execute (id_conn [, parametros])

• Para poder utilizar la función odbc_execute antes se debe utilizar la función odbc_prepare

Page 4: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

4

Ejecutar Sentencias SQL ... 3 <?

// Seleccionar Registros de una Tabla:

$strsql = “SELECT * FROM PRODUCTOS;";

$id_stmt = odbc_do($id_conn,$strsql);

// Es equivalente:

$id_stmt = odbc_exec($id_conn,$strsql);

// También puede realizar lo siguiente:

$id_stmt = odbc_prepare($id_conn, $strsql);

odbc_execute($id_stmt);

?>

Crear una tabla <?

// Crear una tabla de productos

$strsql = "CREATE TABLE PRODUCTOS(

PROD_COD INTEGER NOT NULL,

PROD_NOMBRE VARCHAR(20),

PROD_PRECIO INTEGER);";

$id_stmt = odbc_do($id_conn,$strsql);

?>

Insertar Registros <?

// Insertar registros a una tabla

$strsql = "INSERT INTO PRODUCTOS

VALUES(10,'TV',60000);";

$id_stmt = odbc_exec($id_conn,$strsql);

?>

Actualizar Registros <?

// Actualizar registros de una tabla

$strsql = "UPDATE PRODUCTOS SET PROD_PRECIO = 45000 WHERE PROD_COD = 10;";

$id_stmt=odbc_prepare($id_conn, $strsql);

odbc_execute($id_stmt);

?>

Page 5: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

5

Eliminar Registros <?

// Eliminar registros de una tabla

$strsql = "DELETE FROM PRODUCTOS WHERE PROD_COD = 10; ";

$id_stmt=odbc_prepare($id_conn, $strsql);

odbc_execute($id_stmt);

?>

Seleccionar Registros <?

// Seleccionar registros de una tabla

$strsql = "SELECT PROD_NOMBRE, PROD_PRECIO

FROM PRODUCTOS WHERE PROD_PRECIO >=30000; ";

$id_stmt = odbc_exec($id_conn,$strsql);

?>

Recuperar Registros Seleccionados

<table border="1">

<tr><th>NOMBRE PRODUCTO</th><th>PRECIOS</th></tr>

<?

while (odbc_fetch_row($id_stmt)) {

echo"<tr><td>",odbc_result($id_stmt,1),"</td><td>",odbc_result($id_stmt,2),"</td></tr>";

}?>

</table>

• Para recuperar registros ya seleccionados se utiliza la función odbc_fetch_row.Para acceder un campo se usa la función odbc_result

Mostrar mensajes de error

<?

$id_conn = odbc_connect(“SAMPLEDSN”,”db2admin”,”password.1”)

if ($id_conn == 0) {

$sqlerror = odbc_errormsg($id_conn);

echo "$sqlerror";

} ?>

• La función odbc_errormsg([id_conn]), retorna una cadena que contiene el mensaje de error ODBC o una cadena vacia si no hay error.

Page 6: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

6

Acceso a Bases de Datos con la extensión MySQL

• Para que desde un script PHP se pueda trabajar con una base de datos utilizando una extensión ésta debe estar disponible.

Incoporar la extensión de forma automática o por defecto

• Se debe modificar el archivo de configuración php.ini. Para Windows, se agrega la sentencia:

extension=”ext/php_mysql.dll”

Acceso a Bases de Datos con la extensión MySQL

Incoporar la extensión dinámicamente

• Se hace directamente en el script PHP, utilizando la funcion dl().

• La extensión se carga en tiempo de ejecución y estará disponible sólo para el script actual.

<?php

dl(‘ext/php_mysql.dll’);

. . .

?>

Abrir una conexión al Servidor MySQL • mysql_connect(‘host:numpuerto’,$userid, $password)

• mysql_pconnect(‘host:numpuerto’,$userid,$password)

<?php

$idConn =

mysql_connect('localhost:3306','root','mysql');

if (!$idConn) {

die(“Error de conexión: ". mysql_error());

}

echo "Conexión satisfactoria";

?>

Cerrar una conexión al Servidor MySQL • mysql_close($idConn)

<?php

$idConn =

mysql_connect('localhost:3306','root','mysql');

if (!$idConn) {

die(“Error de conexión: ". mysql_error());

}

echo "Conexión satisfactoria";

mysql_close($idConn);

?>

Page 7: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

7

Seleccionar una Base de Datos en MySQL • mysql_select_db($BD,$idConexion)

<?php

$idConn =

mysql_connect('localhost:3307','root','mysql');

$dbSelect = mysql_select_db('SAMPLE', $idConn);

if (!$dbSelect) {

die ('Error en la selección:' . mysql_error());

}

?>

Crear una Base de Datos en MySQL • mysql_create_db($BD,$idConexion)

<?php

$idConn =

mysql_connect('localhost:3306',root','mysql');

if (mysql_create_db('BD_productos',$idConn)) {

echo "La base de datos se creo correctamente";

} else {

echo 'Error al crear la BD:' . mysql_error();

}

?>

Eliminar una Base de Datos en MySQL • mysql_drop_db($BD,$idConexion)

<?php

if (mysql_drop_db('BD_productos', $idConn)) {

echo "La base de datos ha sido eliminada";

} else {

echo 'Error al eliminar la BD:'.mysql_error();

}

?>

Ejecutar Sentencias SQL usando funciones MySQL

• La función mysql_query() permite ejecutar cualquier sentencia SQL

mysql_query (“sentenciaSQL”,$idConn)

• mysql_query() envía una consulta (“sentenciaSQL”) a la base de datos que está activa en el servidor asociado con el identificador de conexión $idConn.

• Si se ejecuta una sentencia SQL del tipo: UPDATE, DELETE, DROP o INSERT, CREATE, retorna TRUE en caso de éxito y FALSE en caso contrario.

• Si se ejecuta una sentencia SQL del tipo SELECT, SHOW o DESCRIBE, retorna un resource en caso de exito o FALSE en caso de error.

Page 8: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

8

Crear una Tabla <?php

$strsql = "CREATE TABLE EMPLEADOS(

EMP_COD INTEGER NOT NULL,

EMP_NOMBRE VARCHAR(20),

EMP_PRECIO VARCHAR(20));";

$result = mysql_query($strsql,$idConn);

if (!$result) {

die('Sentencia no ejecutada:'. mysql_error());

}

?>

Insertar Registros en una Tabla <?php

$strsql = "INSERT INTO EMPLEADOS

VALUES(10,'PEDRO PEREZ', ‘PROGRAMADOR’);";

$result = mysql_query($strsql,$idConn);

if (!$result) {

die('Sentencia no ejecutada:'. mysql_error());

}

?>

Actualizar Registros en una Tabla <?php

$strsql = "UPDATE EMPLEADOS SET EMP_CARGO =

‘DISEÑADOR’ WHERE EMP_COD = 10;";

$result = mysql_query($strsql,$idConn);

if (!$result) {

die('Sentencia no ejecutada:'. mysql_error());

}

?>

Eliminar Registros en una Tabla <?php

$strsql="DELETE FROM EMPLEADOS WHERE EMP_COD=10;"

$result = mysql_query($strsql,$idConn);

if (!$result) {

die('Sentencia no ejecutada:'. mysql_error());

}

?>

Page 9: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

9

Eliminar una Tabla <?php

$strsql="DROP TABLE EMPLEADOS";

$result = mysql_query($strsql,$idConn);

if (!$result) {

die('Sentencia no ejecutada:'. mysql_error());

}

?>

Seleccionar Registros de una Tabla <?php

$strsql="SELECT EMP_NOMBRE, EMP_CARGO

FROM EMPLEADOS WHERE EMP_CARGO = ‘DISEÑADOR’;"

$result = mysql_query($strsql,$idConn);

if (!$result) {

die('Sentencia no ejecutada:'. mysql_error());

}

?>

Recuperar Registros seleccionados .. 1 <?php

$strsql="SELECT EMP_COD, EMP_NOMBRE FROM EMPLEADOS WHERE

EMP_CARGO = ‘PROGRAMADOR’;"

$result = mysql_query($strsql);

if ($result) {

$fila = mysql_fetch_row($result);

echo $fila[0]; // El EMP_COD del primer registro retornado

echo $fila[1]; //El EMP_NOMBRE del primer registro retornado

}

?>

Recuperar Registros seleccionados .. 2 <?php

$strsql="SELECT EMP_COD, EMP_NOMBRE FROM EMPLEADOS WHERE

EMP_CARGO = ‘PROGRAMADOR’;"

$result = mysql_query($strsql);

if ($result) {

$fila = mysql_fetch_array($result);

echo $fila[0]; // Equivalente a:

// $fila[“EMP_COD”]

echo $fila[1]; // Equivalente a:

// $fila[“EMP_NOMBRE”]

}

?>

Page 10: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

10

Recuperar Registros seleccionados .. 3 <?php

$strsql="SELECT EMP_COD, EMP_NOMBRE FROM EMPLEADOS WHERE

EMP_CARGO = ‘PROGRAMADOR’;"

$result = mysql_query($strsql);

if ($result) {

$fila = mysql_fetch_assoc($result);

echo $fila[“EMP_COD”];

echo $fila[“EMP_NOMBRE”];

}

?>

Recuperar Registros seleccionados .. 4 <?php

$strsql="SELECT EMP_COD, EMP_NOMBRE FROM EMPLEADOS WHERE

EMP_CARGO = ‘PROGRAMADOR’;"

$result = mysql_query($strsql);

if ($result) {

$objfila = mysql_fetch_object($result);

echo $objfila->EMP_COD;

echo $objfila->EMP_NOMBRE;

}

?>

Recuperar Registros seleccionados .. 5 <?php

$result = mysql_query("select * from EMPLEADO");

while ($fila = mysql_fetch_array($result)) {

echo $fila[“EMP_COD”];

echo $fila[“EMP_NOMBRE”];

echo $fila[“EMP_CARGO”];

}

mysql_free_result($result);

?>

Otras funciones útiles de la extensión de MySQL

• mysql_error($idConexion)

• mysql_errno($idConexion)

• mysql_ping($idConexion)

• mysql_info($idConexion)

• mysql_field_name($resultado,$indiceCampo)

• mysql_field_type($resultado,$indiceCampo)

• mysql_num_fields($resultado)

• mysql_num_rows($resultado)

• mysql_list_tables($BD,$idConexion)

• mysql_list_dbs($idConexion)

• mysql_free_result($resultado)

Page 11: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

11

Resumen • Se describió cómo se trabaja con bases de datos

en PHP

• Se utilizó ODBC para acceder a bases de datos

• Se explicó cómo conectarse y desconectarse a una base de datos

• Se explicó cómo recuperar, insertar, eliminar, y actualizar registros

• Se utilizó la extensión de PHP para acceder bases de datos en MySQL

Laboratorio: Acceso a Bases de Datos usando PHP

Unidad 8

Introducción a la Programación Orientada a Objetos con PHP

Unidad 9

Objetivos de Aprendizaje • Crear Clases y Objetos en PHP

• Describir la Herencia en PHP

• Conocer cómo se implementa el Polimorfismo en PHP

• Crear Clases Abstractas e Interfaces

• Discutir como se realiza la clonación de objetos

Page 12: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

12

Definición de Clases • La definición de una clase comienza con la palabra

"class", luego se coloca el nombre de la clase. La definición del los atributos y métodos miembros se hace dentro de llaves.

<?php

class ClaseA { // * atributos

public $var1;

private $var2 = 'Valor por defecto';

// * método

function mostrarVar() {

echo $this->var2;

}

}

?>

Definición de Objetos • Para crear una instancia de una clase, se crea

un nuevo objeto y éste es asignado a una variable.

<?php

$obj1 = new ClaseA();

$obj2 = $obj1;

/* $obj2 hace referencia a la misma instancia */

?>

Acceder a atributos y métodos • Para acceder a los atributos y métodos de un

objeto utilizamos el operador flecha “->”, como se muestra a continuación:

<?php

/*

$objeto->nombre_atributo;

$objeto->nombre_metodo;

*/

$obj1 = new ClaseA();

echo $obj1->var1; // A la variable se le

quita el ‘$’

$obj1->mostrarVar();

?>

Acceder a atributos y métodos … 2 • Para acceder a un miembro dentro de la misma

definición de la clase, se utiliza la variable $this, que hace referencia a la instancia actual.

<?php

class ClaseB

{

private $var1=“Hola!”;

private $var2=“Adios!”;

public function mostrarVar1() {

echo $this->var1;

}

public function mostrarVar2() {

$this->mostrarVar1();

echo $this->var2;

}

}

?>

Page 13: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

13

Visibilidad de atributos y métodos • Pública: Los elementos pueden ser accedidos

desde cualquier lugar dentro del programa.

• Protegida: Los elementos limitan el acceso sólo a la clase que los define y a las clases que heredan de ésta.

• Privada: Los elementos limitan la visibilidad sólo a la clase que los define.

• La visibilidad de un atributo o método puede ser definida al anteponerle a la declaración las palabras:

• public

• protected

• private

Visibilidad de atributos y métodos … 2 <?php

class ClaseB

{

private $var1=“Hola!”;

protected $var2=“Adios!”;

public function mostrarVar1() {

echo $this->var1;

}

public function mostrarVar2() {

echo $this->var2;

}

}

?>

Constructor de una clase • El método constructor se invoca cada vez que se

crea un nuevo objeto. Un constructor de clase se define con la función __construct().

<?php

class ClaseA {

private $var1;

function __construct($arg1){

$this->var1=$arg1; }

}

$objA = new ClaseA("Valor1");

// Se ejecuta el constructor

?>

Destructor de una clase • El método destructor de una clase, si está

definido, se invoca cuando todas las referencias a un objeto en particular sean removidas o cuando el objeto sea explícitamente destruido.

• Un destructor de clase se define con la función __destruct().

Page 14: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

14

Destructor de una clase … 2 <?php

class ClaseA {

public $var1;

function __construct($arg1) {

$this->var1=$arg1; }

function __destruct() {

print "Se destruye el objeto!"; }

}

$objA = new ClaseA("Valor 1");

/* Al terminar de usar el objeto o al finalizar el script se destruye el objeto */

?>

Definir métodos “getter” y “setter” <?php

class ClaseA {

private $var1;

function __construct($arg1) {

$this->var1=$arg1; }

function set_var1($valor) {

$this->var1=$valor; }

function get_var1() {

return $this->var1; }

}

$objA = new ClaseA("Valor 1");

$objA->set_var1("Nuevo valor");

echo $objA->get_var1();

?>

Constantes de una clase • Dentro de una clase se pueden definir constantes.

Se nombran sin utilizar el signo ‘$’.

• Los valores constantes no pueden ser accedidos desde una instancia.

• Las constantes definidas dentro de una clase sólo se pueden acceder a través del nombre de la clase o a través de un método que las retorne o muestre.

• No se puede utilizar el operador flecha (->) para accederlas.

Constantes de una clase … 2 <?php

class claseA {

const miConstante = 'Valor constante!';

function get_miConstante() {

return self::miConstante;

// No está pemitido: $this->miConstante

}

}

$objetoA = new ClaseA();

$var1=$objetoA->get_miConstante();

echo ClaseA::miConstante; // Se muestra la constante

echo $objetoA->miConstante; // Error!

echo $objetoA::miConstante; // Error!

?>

Page 15: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

15

El Operador de resolución :: • El operador de resolución, dobles dos puntos

(::), es un símbolo que permite acceder a los atributos o métodos estáticos y las constantes de una clase.

• El operador de resolución también se utiliza cuando se necesita tener acceso desde una clase hija a los atributos o métodos de su clase padre.

• self: Hace referencia a la clase actual, a la clase que define al método.

• parent: Hace referencia a la clase padre.

El Operador de resolución :: … 2 <?php

class ClaseA {

const CONST_A = 'A';

}

class ClaseB extends ClaseA {

const CONST_B = ‘B’;

public static $estaticaB = 'Variable estática';

public static function mostrarConstantes() {

echo parent::CONST_A;

echo self::CONST_B; }

public static function mostrarEstaticas() {

echo self::$estaticaB; }

}

?>

El Operador de resolución :: … 3 <?php

echo ClaseA::CONST_A;

echo ClaseB::estaticaB;

ClaseB::mostrarEstaticas();

?>

El Operador de resolución :: … 4 <?php

class ClasePadre {

private $varPriv;

protected $varProt;

function __construct($valor) {

$this->$varPriv=$valor;

$this->$varProt=$valor;

}

protected function miFuncion() {

echo "Funcion del padre";

}

}

?>

Page 16: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

16

El Operador de resolución :: … 5 <?php

class ClaseHijo extends ClasePadre

{

function __construct() {

parent::__construct("Inicializada desde el padre");

$this->$varProtected="Inicializada desde el hijo";

}

public function miFuncion() {

parent::miFuncion();

echo "Función del hijo";

}

}

?>

El Operador de resolución :: • El operador de resolución, dobles dos puntos

(::), es un símbolo que permite acceder a los atributos o métodos estáticos y las constantes de una clase.

• El operador de resolución también se utiliza cuando se necesita tener acceso desde una clase hija a los atributos o métodos de su clase padre.

• self: Hace referencia a la clase actual, a la clase que define al método.

• parent: Hace referencia a la clase padre.

Resumen • Se crearon Clases y Objetos en PHP

• Se describió la Herencia en PHP

• Se conoció cómo se implementa el Polimorfismo en PHP

• Se crearon Clases Abstractas e Interfaces

• Se discutió como se realiza la clonación de objetos

Laboratorio: Introducción a la Programación Orientada a Objetos

Unidad 10

Page 17: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

17

Extensiones en PHP

Unidad 11

Objetivos de Aprendizaje • Conocer en que consiste XML

• Utilizar la extensión DOM de PHP para trabajar con documentos XML

• Crear scripts PHP que puedan manipular documentos XML

• Conocer en qué consiste la librería estándar de PHP

Estructura de un archivo XML • Al igual que HTML, un documento XML es un archivo

de texto plano en los que se utilizan etiquetas para delimitar los elementos del documento.

• Sin embargo, XML define estas etiquetas en función del tipo de datos que está describiendo y no de la apariencia que tendrán en la página.

• Además de permite crear nuevas etiquetas y ampliar las existentes.

Ejemplo de un archivo XML • Para crear una instancia de una clase, se crea

un nuevo objeto y éste es asignado a una variable.

<?xml version="1.0" encoding="ISO-8859-1"?>

<ResumenNotas>

<Materia>Matemáticas</Materia>

<Calificacion>A</Calificacion>

<Materia>Física</Materia>

<Calificacion>B</Calificacion>

<Materia>Química</Materia>

<Calificacion>B</Calificacion>

</ResumenNotas>

Page 18: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

18

Extensión de PHP para trabajar con XML • La extensión para soporte a XML ha sido re-

estructurada a partir de PHP 4.3.0. Antes se necesitaba incorporar la extensión ‘domxml’ para poder manipular los documentos XML.

• Ahora se puede utilizar las funciones DOM (Document Object Model), que ya vienen incorporadas en PHP.

• No se necesita ninguna instalación para usar estas funciones, son parte del núcleo de PHP. Utilizaremos las funciones de la extensión DOM para manipular documentos XML.

Cargar un documento XML load(“nombre_archivo.xml”)

• Carga un documento XML desde un archivo y lo deja en un objeto del tipo DOMDocument.

<?php

/* Se crea un objeto del tipo DOMDocument, que es el contenedor del documento xml */

$docXml = new DOMDocument();

/* Se carga el documento XML en el objeto $docXml */

$docXml->load('NotasMaterias.xml');

/* La funcion saveXML() captura el documento XML cargado en el objeto $docXml y retorna el contenido en un string */

echo $docXml->saveXML(); // Se imprime el contenido

?>

Cargar un documento XML … 2 loadXML(“codigoXml”)

• Carga un documento XML a partir de un string y lo deja en un objeto del tipo DOMDocument.

<?php

/* Se crea un objeto del tipo DOMDocument, que es el contenedor del documento xml */

$docXml = new DOMDocument();

$strXml="<Materias><Materia>Quimica<Materia></Materias>";

/* Se carga el documento XML en el objeto $docXml */

$docXml->loadXML($strXml);

echo $docXml->saveXML(); // Se imprime el contenido

?>

Capturar un documento XML saveXML()

• Captura el documento XML que esté contenido en un objeto DOMDocument y lo retorna en un string. Esta función generalmente se llama despues de cargar un documento XML.

<?php

$docXml = new DOMDocument();

/* Se carga el documento XML en el objeto $docXml */

$docXml->load('NotasMaterias.xml');

$codXML = $docXml->saveXML(); // Captura el documento XML

echo $codXML; // Se imprime el contenido

?>

Page 19: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

19

Capturar un documento XML ... 2 save($archivo)

• Captura el documento XML que esté contenido en un objeto DOMDocument y lo almacena en un archivo. Esta función generalmente se llama después de crear un documento XML.

<?php

$strXml="<Materias><Materia>Quimica</Materia></Materias>";

$docXml = DOMDocument::loadXML($strXml);

// Se guarda el contenido en un archivo

$docXml->save("materias.xml");

?>

Crear Elementos XML CreateElement($nombreElemento,$valor)

• Crea una nueva instancia de la clase DOMElement.

• Este elemento no formará parte del documento a menos que sea agregado con la función DOMNode->appendChild().

• El parámetro $nombreElemento es el nombre del elemento que se va a crear y $valor el contenido de ese elemento. Si no se especifica $valor, se crea un elemento vacío.

Crear Elementos XML … 2 CreateAttribute($nombreAtributo)

• Crea una nueva instancia de la clase DOMAttr.

• Este atributo no será parte del documento a menos que sea agregado con la función DOMNode->appendChild().

• Recibe como parámetro el nombre del atributo.

Crear Elementos XML … 3 CreateTextNode($contenido)

• Crea una nueva instancia de la clase DOMText.

• Este texto no será parte del documento a menos que sea agregado con la función DOMNode->appendChild().

• Recibe como parámetros el contenido de texto para el elemento.

setAttribute($nombreAtr,$valor)

• Asigna un valor a un atributo. Si el atributo no existe se crea. Recibe como parámetros el nombre del atributo y su valor.

Page 20: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

20

Crear Elementos XML … 4 appendChild($nodo)

• Agrega un nodo a una lista de nodos. Estos nodos pueden ser atributos, elementos o nodos de texto.

• El nodo puede ser creado utilizando las funciones:

DOMDocument-> createElement()

DOMDocument->createTextNode()

DOMDocument-> createAttribute()

Obtener Elementos XML getElementByTagName($nombreElemento)

• Retorna una nueva instancia de la clase DOMNodeList con todos los elementos que tengan el nombre dado, siguiendo el orden como han sido encontrados en el documento.

• Recibe como parámetro el nombre del(los) elemento(s) que se quiere obtener. Si se coloca como parámetro el asterisco (*), retorna todos los elementos del documento.

• Esta función retorna una lista de elementos del tipo DOMNodeList con todos los elementos seleccionados.

Obtener Elementos XML … 2 getElementById($IdElemento)

• Retorna una nueva instancia de la clase DOMNodeList con todos los elementos que posean un atributo “ID” con el valor dado ($IdElemento), siguiendo el orden como han sido encontrados en el documento. Recibe como parámetro el id del (los) elemento(s) que se quiere obtener.

• Esta función retorna una lista de elementos del tipo DOMNodeList con todos los elementos seleccionados.

Obtener Elementos XML … 3 getAttribute($nombreAtributo)

• Retorna el valor del atributo con el nombre dado, para el nodo actual:

$valor = $nodo->getAttribute(“id”)

Page 21: Unidad 5 - Acceso a Bases de Datos .- Version Completa - Mayo 2.013

14/05/2013

21

Eliminar Elementos XML removeChild($nodo)

• Elimina un nodo de la lista de nodos hijos de un elemento especificado.

• Recibe como parámetro el nodo que se quiere eliminar.

removeAttribute($nombreAtributo)

• Elimina el atributo especificado de un nodo.

• Recibe como parámetro el nombre del atributo que se desea eliminar del elemento.

Resumen • Se conoció en qué consiste XML

• Se utilizó la extensión DOM de PHP para trabajar con documentos XML

• Se crearon scripts PHP que puedan manipular documentos XML

• Se conoció en qué consiste la librería estándar de PHP

Laboratorio: Extensiones PHP