Web social
Tabla de contenidos
La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.
Resúmen
Capa de abstracción de base de datos para PHP
Sobre el autor
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
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
Sus comentarios son importantes.
Hola!
Gastón (05/09/2009)
¿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.
Agregar un comentario
Debe estar identificado para agregar un comentario