Skip to content

1A Un poco de historia

UD 4 Un poco de historia

RA 6 Desarrolla aplicaciones web de acceso a almacenes de datos, aplicando medidas para mantener la seguridad y la integridad de la información.

  • a) Se han analizado las tecnologías que permiten el acceso mediante programación a la información disponible en almacenes de datos.

En la unidad anterior, estudiamos los fundamentos de la POO en el lenguaje así cómo las estructuras de datos, clases y funciones que se usan. En esta unidad, veremos cómo las técnicas de acceso a bases de datos en PHP han evolucionado significativamente desde los inicios del lenguaje, adaptándose a las necesidades de los desarrolladores y a los avances en tecnología.

PHP soporta más de 15 sistemas gestores de bases de datos: SQLite, Oracle, SQL Server, PostgreSQL, IBM DB2, MySQL, etc. Hasta la versión 5 de PHP, el acceso a las bases de datos se hacía principalmente utilizando extensiones específicas para cada sistema gestor de base de datos (extensiones nativas). Es decir, que si queríamos acceder a una base de datos de PostgreSQL, deberíamos instalar y utilizar la extensión de ese gestor en concreto. Las funciones y objetos a utilizar eran distintos para cada extensión.

A partir de la versión 5 de PHP se introdujo en el lenguaje una extensión para acceder de una forma común a distintos sistemas gestores: PDO. La gran ventaja de PDO está clara: podemos seguir utilizando una misma sintaxis aunque cambiemos el motor de nuestra base de datos. Por el contrario, en algunas ocasiones preferiremos seguir usando extensiones nativas en nuestros programas. Mientras PDO ofrece un conjunto común de funciones, las extensiones nativas normalmente ofrecen más potencia (acceso a funciones específicas de cada gestor de base de datos) y en algunos casos también mayor velocidad.

De los distintos SGBD existentes, vas a aprender a utilizar MySQL/Maria DB. Es el gestor de bases de datos más empleado con el lenguaje PHP. Como ya vimos, es la letra "M" que figura en los acrónimos AMP y XAMPP.


PHP/FI (antes de PHP 3)

  • PHP inició como un conjunto de herramientas rudimentarias para crear páginas dinámicas.
  • Las bases de datos más comunes en esa época eran MySQL y PostgreSQL, pero el soporte era limitado.
  • Las funciones de acceso a bases de datos no estaban unificadas, lo que obligaba a usar funciones específicas para cada motor, como mysql_query o pg_query.

PHP 3

  • PHP 3 introdujo una extensión para trabajar con MySQL, el sistema de gestión de bases de datos más popular para aplicaciones web en ese momento.
  • Se usaban funciones como:
    $conn = mysql_connect('localhost', 'usuario', 'contraseña');
    mysql_select_db('base_de_datos', $conn);
    $result = mysql_query('SELECT * FROM tabla');
    

Estas funciones no eran seguras frente a inyecciones SQL.

  • No soportaban funcionalidades avanzadas, como consultas preparadas.
  • Las conexiones no eran tan robustas para aplicaciones escalables.

Lista de las versiones del lenguaje PHP » BaulPHP


PHP 4 (PEAR::DB)

  • Una biblioteca orientada a objetos que introdujo una capa de abstracción de bases de datos.
  • Permitía usar una misma interfaz para diferentes motores de bases de datos (MySQL, PostgreSQL, SQLite, etc.).
  • Ejemplo:

require_once 'DB.php';
$dsn = 'mysql://usuario:contraseña@localhost/base_de_datos';
$db = DB::connect($dsn);
$result = $db->query('SELECT * FROM tabla');
- Abstracción básica: el mismo código funcionaba para diferentes motores. - Mejor estructura y modularidad que las funciones nativas.

Contras:

  • Menor rendimiento en comparación con funciones específicas.
  • No era tan ampliamente adoptado debido a su complejidad inicial.

PHP 5 PDO

(PHP Data Objects, 2005):

  • PDO es una extensión orientada a objetos que proporciona una interfaz uniforme para acceder a múltiples bases de datos.
  • Es el estándar moderno para manejar bases de datos en PHP.
  • Ejemplo:

$pdo = new PDO('mysql:host=localhost;dbname=base_de_datos', 'usuario', 'contraseña');
$stmt = $pdo->prepare('SELECT * FROM tabla WHERE id = :id');
$stmt->execute(['id' => 1]);
$result = $stmt->fetchAll();
- Consultas preparadas: mejoran la seguridad contra inyecciones SQL. - Portabilidad: permite cambiar entre motores de bases de datos sin modificar demasiado el código. - Flexibilidad: soporta diferentes modos de recuperación de datos (arrays asociativos, objetos, etc.).

Contras:

  • Puede ser más complejo de implementar para desarrolladores novatos.
  • Algunas funciones específicas de ciertos motores de bases de datos no están soportadas de forma directa.

Mysqli (MySQL Improved):

  • mysqli es considerada como una de las extensiones específicas modernas del lenguaje
  • Introducida como una mejora de la extensión mysql obsoleta.
  • Soporta características modernas como consultas preparadas y acceso a MySQL nativo.
  • Ejemplo:

$mysqli = new mysqli('localhost', 'usuario', 'contraseña', 'base_de_datos');
$stmt = $mysqli->prepare('SELECT * FROM tabla WHERE id = ?');
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result();
- Totalmente compatible con las versiones modernas de MySQL. - Más rápido y seguro que mysql. - Solo funciona con MySQL, lo que lo hace menos portátil.


6. PHP 7 y 8: Rendimiento y Buenas Prácticas

Mejoras en Rendimiento:

  • PHP 7 introdujo optimizaciones significativas en la ejecución de scripts, haciendo que las operaciones de bases de datos sean más rápidas.
  • PHP 8 continuó con estas mejoras.

Buenas Prácticas:

  • Uso de PDO como estándar para aplicaciones nuevas debido a su portabilidad y seguridad.
  • Desuso de extensiones obsoletas como mysql (eliminada desde PHP 7).

Uso combinado con Frameworks:

  • Los frameworks modernos como Laravel y Symfony han popularizado el uso de ORMs (Object-Relational Mapping) como Eloquent o Doctrine, que abstraen aún más el manejo de bases de datos.

PHP 8.0: Visión completa de las novedades (1/4) – Nette Blog


7. Resumen Histórico

Período Técnica Ventajas Limitaciones
Antes de PHP 4 Funciones nativas Simples, fáciles de usar Inseguras, no portables
PHP 4 PEAR::DB Abstracción básica Menor rendimiento
PHP 5 (2005) PDO, mysqli Consultas preparadas, portabilidad Curva de aprendizaje
PHP 7 y 8 PDO, ORMs Rendimiento, buenas prácticas Complejidad en proyectos simples

Hoy en día, PDO es la técnica recomendada para acceder a bases de datos en PHP debido a su equilibrio entre rendimiento, seguridad y portabilidad.

¿Inyección SQL?

¿Conocías el significado de esta expresión?

  • Si no quieres esperarte a comenzar con la unidad, te dejo un vídeo con algunas de las técnicas más importantes que trataremos en el tema ante el hackeo más conocido por los desarrolladores web
  • En este punto no se pide aún el código, pero si que comentes si estabas familizarizado con este concepto.
  • Ánimo con la unidad!