1. Curso de Introducción a PHP 5
Tema 4: PHP 5 y MySQL
*POO = Programación Orientada a Objetos
1. PDO. PHP Data Objects
2. MySQLi
2. Curso de Introducción a PHP 5
Tema 4: PHP 5 y MySQL
*POO = Programación Orientada a Objetos
1. PDO. PHP Data Objects
2. MySQLi
3. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
PDO es una librería para conectarse a bases de datos.
PDO es una capa de abstracción de acceso a datos. No importa qué BD, siempre se
utilizan las mismas funciones.
PDO necesita tener instalado el driver específico de cada base de datos (pdo_mysql,
pdo_sqlite, pdo_odbc, ..)
PDO NO es una capa de abstración de acceso a base de datos (DBAL). No reescribe
código SQL ni simula propiedades no disponibles.
PDO está completamente orientado a objetos
4. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Conectándonos a una base de datos (MySQL)
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
DNS
Conectándonos con “cuidado”
OPCIONALES
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
print "Imposible conectar con la BD: " . $e->getMessage();
die();
}
5. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Cerrando la conexión con la base de datos
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// Hacer algo
unset($dbh);
Ejecutando una petición SQL contra la base de datos (la mala manera)
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
6. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Cerrando la conexión con la base de datos
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// Hacer algo
unset($dbh);
Ejecutando una petición SQL contra la base de datos (la mala manera)
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
7. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Prepared Staments. Plantillas SQL con parámetros
Ventajas de usar prepared statements:
1. La petición SQL sólo necesita ser analizada una única vez. Más rápido.
2. Más difícil ataques SQL-injection.
Tan importante que PDO emula esta característica incluso en aquellos motores de
bases de datos que no lo soportan.
API: http://www.php.net/manual/en/class.pdostatement.php
8. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Prepared Statement sin parámetros
Prepared Statement con parámetros
$stmt = $dbh->prepare("SELECT * FROM FOO");
$stmt->exec();
$data = $stmt->fetchAll();
$name = 'one'; $value = 1;
$stmt = $dbh->prepare(
"INSERT INTO FOO (name, value) VALUES (:name, :value)"
);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
$stmt->execute();
9. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Las transacciones en las bases de datos tienen dos propósitos
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 transacción: transacción 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 información se guarda de manera persistente
10. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Una transacción con PDO
try {
$dbh = new PDO('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();
}
11. Curso de Introducción a PHP 5
4.1. PDO. PHP Data Objects
Tema 4. PHP 5 y MySQL
Más información sobre PDO en
http://www.php.net/manual/en/book.pdo.php
12. Curso de Introducción a PHP 5
Tema 4: PHP 5 y MySQL
*POO = Programación Orientada a Objetos
1. PDO. PHP Data Objects
2. MySQLi
13. Curso de Introducción 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+
Versión POO de las funciones mysql_xxx();
14. Curso de Introducción a PHP 5
4.2. MySQLi
Tema 4. PHP 5 y MySQL
Conéctandonos a una base de datos
$mysqli = new mysqli("localhost", "user", "password", "db_name");
Comprobando el estado de la conexión
if ($mysqli->connect_errno()) {
printf("Error en la conexión: %sn", $mysqli->connect_err());
exit();
}
15. Curso de Introducción a PHP 5
4.2. MySQLi
Tema 4. PHP 5 y MySQL
Cerrando la conexión con una base de datos
$mysqli = new mysqli("localhost", "user", "password", "db_name");
$mysqli->close();
Ejecutando una petición contra la base de datos
$query = "SELECT * FROM Ciudad";
$result = $mysqli->query($query);
while($row = $result->fetch_array())
{
echo $row['codigo_ciudad'];
}
16. Curso de Introducción 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()
17. Curso de Introducción 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() i Integer
d Decimal
s String
b Blob
18. Curso de Introducción 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
automáticamente un COMMIT a la base de datos.
Para desactivar este comportamiento
$mysqli->autocommit(FALSE);
Para forzar COMMIT y ROLLBACK
$mysqli->commit();
$mysqli->rollback();
19. Curso de Introducción a PHP 5
4.2. MySQLi
Tema 4. PHP 5 y MySQL
Más información sobre MySQLi
http://es.php.net/manual/en/book.mysqli.php