Iniciación PHP 5. PHP y MySQL

download Iniciación PHP 5. PHP y MySQL

If you can't read please download the document

Transcript of Iniciación PHP 5. PHP y MySQL

Curso de Introduccin a PHP 5

Tema 4: PHP 5 y MySQL

*POO = Programacin Orientada a Objetos

1. PDO. PHP Data Objects2. MySQLi

Curso de Introduccin a PHP 5

Tema 4: PHP 5 y MySQL

*POO = Programacin Orientada a Objetos

1. PDO. PHP Data Objects2. MySQLi

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

PDO es una librera para conectarse a bases de datos.

PDO es una capa de abstraccin de acceso a datos. No importa qu BD, siempre se utilizan las mismas funciones.

PDO necesita tener instalado el driver especfico de cada base de datos (pdo_mysql, pdo_sqlite, pdo_odbc, ..)

PDO NO es una capa de abstracin de acceso a base de datos (DBAL). No reescribe cdigo SQL ni simula propiedades no disponibles.

PDO est completamente orientado a objetos

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Conectndonos a una base de datos (MySQL)

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);

DNS

Conectndonos con cuidado

OPCIONALES

try{

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
}catch(PDOException$e){

print"Imposible conectar con la BD:".$e->getMessage();
die();

}

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Cerrando la conexin con la base de datos

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);

// Hacer algo

unset($dbh);

Ejecutando una peticin SQL contra la base de datos (la mala manera)

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
foreach($dbh->query('SELECT*fromFOO')as$row){
print_r($row);
}

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Cerrando la conexin con la base de datos

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);

// Hacer algo

unset($dbh);

Ejecutando una peticin SQL contra la base de datos (la mala manera)

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
foreach($dbh->query('SELECT*fromFOO')as$row){
print_r($row);
}

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Prepared Staments. Plantillas SQL con parmetros

Ventajas de usar prepared statements:

1. La peticin SQL slo necesita ser analizada una nica vez. Ms rpido.

2. Ms difcil ataques SQL-injection.

Tan importante que PDO emula esta caracterstica incluso en aquellos motores de bases de datos que no lo soportan.

API: http://www.php.net/manual/en/class.pdostatement.php

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Prepared Statement sin parmetros

Prepared Statement con parmetros

$stmt=$dbh->prepare("SELECT * FROM FOO");$stmt->exec();$data = $stmt->fetchAll();

$name='one'; $value=1;

$stmt=$dbh->prepare( "INSERTINTOFOO(name,value)VALUES(:name,:value)" );
$stmt->bindParam(':name',$name);
$stmt->bindParam(':value',$value);

$stmt->execute();

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Las transacciones en las bases de datos tienen dos propsitos

1. Mantener la base de datos en un estado coherente en caso de fallo del sistema.

2. Ejecutar el proceso de manera aislada.

Un ejemplo de transaccin: transaccin bancaria. O todo. O nada.

A: Atomic. O todo o nada

C: Consistent. O No se violan las restricciones de integridad (foreign keys)

I: Isolated. Los datos son bloqueados

D: Durable. La informacin se guarda de manera persistente

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Una transaccin con PDO

try{

$dbh=newPDO('odbc:SAMPLE',$user,$pass);

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$dbh->beginTransaction();
$dbh->exec("INSERT INTO FOO (bar)values('bar')");
$dbh->commit();

}catch(Exception$e){

$dbh->rollBack();

}

Curso de Introduccin a PHP 5

4.1. PDO. PHP Data Objects

Tema 4. PHP 5 y MySQL

Ms informacin sobre PDO en

http://www.php.net/manual/en/book.pdo.php

Curso de Introduccin a PHP 5

Tema 4: PHP 5 y MySQL

*POO = Programacin Orientada a Objetos

1. PDO. PHP Data Objects2. MySQLi

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

MySQLi es realmente MySQL Improved Extension.

Implementa funcionalidad para conectarse a bases de datos MySQL 4.1+

Versin POO de las funciones mysql_xxx();

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

Conctandonos a una base de datos

$mysqli=newmysqli("localhost","user","password","db_name");

Comprobando el estado de la conexin

if($mysqli->connect_errno()){
printf("Error en la conexin:%s\n",$mysqli->connect_err());
exit();

}

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

Cerrando la conexin con una base de datos

$mysqli=newmysqli("localhost","user","password","db_name");

$mysqli->close();

Ejecutando una peticin contra la base de datos

$query = "SELECT * FROM Ciudad";
$result = $mysqli->query($query);

while($row = $result->fetch_array())
{
echo $row['codigo_ciudad'];
}

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

Utilizando prepared staments

$sql = 'INSERT INTO tablename VALUES(?, ?)';

$stmt = $mysqli->stmt_init();

$stmt->prepare($sql);$stmt->bind_param(is, 1, test);$stmt->execute();

$stmt->close()

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

Utilizando prepared staments

$sql = 'INSERT INTO tablename VALUES(?, ?)';

$stmt = $mysqli->stmt_init();

$stmt->prepare($sql);$stmt->bind_param(is, 1, test);$stmt->execute();

$stmt->close()

iInteger

dDecimal

sString

bBlob

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

MySQLi no soporta transacciones, en su lugar debemos confiar en COMMIT y ROLLBACK de la base de datos.

MySQLi por defecto implementa auto-commit, despues de cualquier consulta de hace automticamente un COMMIT a la base de datos.

Para desactivar este comportamiento

$mysqli->autocommit(FALSE);

Para forzar COMMIT y ROLLBACK

$mysqli->commit();

$mysqli->rollback();

Curso de Introduccin a PHP 5

4.2. MySQLi

Tema 4. PHP 5 y MySQL

Ms informacin sobre MySQLi

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