Navegación

PDO (PHP Data Objects)

Publicado por Sherekan el 11/09/2008 en PHP - Nivel Básico

Tabla de contenidos

Logo de PHP

La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.

Leer los comentarios.

Resúmen

Capa de abstracción de base de datos para PHP

Sobre el autor

Avatar de Sherekan

Sherekan tiene 22 años y su ocupación es Programador.

Forma parte del club desde 05/11/2007 a las 15:12 habiendo estado en linea 27/04/2009 a las 09:36 por última vez.

Ha publicado 4 artículos en clubdesarrolladores con un promedio de valoración de 8.70 puntos. Puedes visitar su sitio web en http://sherekan.com.ar

Estadísticas

  • Leido 17408 veces
  • Valorado 9.00 puntos

Que es PDO

PDO (PHP Data Objects) es una extensión de PHP, disponible a partir de la versión 5.1, que tiene extensión para la versión 5.0 también. PDO crea básicamente una capa de abstracción, que permite al desarrollador abstraerse de la base de datos de una aplicación. Y de esa manera, hacer el código portable a otras plataformas y motores de bases de datos.

PDO tiene implementaciones para muchos motores de bases de datos, entre ellos:

- PostgreSQL
- MySQL
- Firebird
- SQLite
- DB2
- Oracle
- SQL Server

Por esta razón, muchas otras capas de abstracción como PearDB utilizan PDO como backend.

Instalación de PDO

Instalamos PDO desde PECL:


pecl install pdo



Y su implementación para MySQL (podría ser para cualquier otro motor soportado):


pecl install pdo_mysql



Finalmente agregamos estas directivas al php.ini:


extension=pdo.so
extension=pdo_mysql.so



Reiniciamos el web server, y comprobamos que se haya instalado correctamente la extensión:


php -m | grep pdo



Otra forma de verificar esto, es hacer una llamada a la función phpinfo().


phpinfo();



Tabla de ejemplo

Vamos a crear una tabla, que vamos a usar después para hacer algunas pruebas con PDO. Acá está el script SQL para MySQL:


CREATE TABLE releases (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
version VARCHAR(10) NOT NULL,
name VARCHAR(100) NULL,
date DATE NOT NULL
);
INSERT INTO releases (version, name, date) VALUES ("2.2", "Potato", "2000-08-15");
INSERT INTO releases (version, name, date) VALUES ("3.0", "Woody", "2002-07-19");
INSERT INTO releases (version, name, date) VALUES ("3.1", "Sarge", "2005-06-06");



Conexión a la base de datos

PDO nos ofrece una interfaz orientada a objetos bastante sencilla de utilizar. Para establecer la conexión a la base de datos, tenemos que crear un nuevo objeto PDO, pasándole como parámetro al constructor la URL de conexión a la base de datos.
La URL de conexión a la base de datos se forma así:


db:host=hostname;dbname=dbname



Veamos un ejemplo:


try {
$conn = new PDO("mysql:host=localhost;dbname=mydb");
} catch (PDOException $e) {
echo $e->getMessage();
}



En caso de error, saltaría una excepción PDOException.

Para cerrar la conexión:


$db = null;



Consultas

Para realizar consultas a la base de datos, tenemos los siguientes métodos:

query()
Ejecuta la consulta pasada como parámetro, y retorna un objeto PDOStatement con el resultado. Sirve para consultas del tipo SELECT.


$sql = 'SELECT * FROM releases ORDER BY version';
foreach ($conn->query($sql) as $row) {
echo $row['name'] . "n";
echo $row['version'] . "n";
echo $row['date'] . "n";
}



exec()
Ejecuta la consulta pasada como parámetro y retorna el número de registros afectados. Sirve para consultas que no tienen que devolver un resultado, sino que la cantidad de registros afectados (como las consultas DELETE o UPDATE) o nada (como las consultas DDL).


$sql = "UPDATE releases WHERE id > 2";
$affectedRows = $conn->exec($sql);
echo "Registros modificados: $affectedRows";



Prepared statements

Para usar prepared statements, tenemos los métodos prepare(), bindParam() y execute() que se usan de la siguiente manera:


$sql = "INSERT INTO releases (version, name, date) VALUES (:version, :name, :date)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':name', "Etch");
$stmt->bindParam(':version', "4.0");
$stmt->bindParam(':date', "2007-04-08");
$stmt->execute();



Transacciones

Para iniciar una transacción, utilizamos el método beginTransaction():


$conn->beginTransaction();



Después podemos hacer todas las consultas que queramos, y aceptar la transacción con el método commit():


$conn->commit();



O si queremos deshacerla, utilizamos el método rollBack():


$conn->rollback();



Sencillo no?

Conclusiones

Vimos como PDO nos permite conectarnos a la base de datos, hacer consultas, crear prepared statements, y utilizar transacciones, todo a través de una capa de abstracción que permite que nuestro código sea portable.
Recomiendo leer la documentación de http://www.php.net/manual/en/ref.pdo.php para ver todo el potencial de PDO.

Si tiene alguna pregunta sobre éste artículo por favor deje un comentario y será respondido.

Descargas

El artículo no tiene descargas asociadas

Listado de comentarios

Sus comentarios son importantes.

Avatar de Gastón

Hola!

¿Existe alguna manera eficiente de contar cuantas consultas han sido realizadas en el tiempo de ejecución del script?

Esto es, disponer de la cantidad execute o exec realizados.

Es muy útil para colocar en los footers de los sitios, como en este.

Saludos.

Gastón (05/09/2009)

Agregar un comentario

Debe estar identificado para agregar un comentario