Este artículo cubre temas avanzados en PHP, incluyendo el uso de bases de datos, cookies y sesiones para mejorar la eficiencia en el desarrollo y ejecución de aplicaciones.
Diseño de tablas y operaciones MySQL
Los programadores de PHP deben dominar la creación de tablas, el uso de comandos SQL y la estructura de directorios de MySQL. La carpeta data almacena archivos de bases de datos, bin contiene comandos de administración, y los archivos *.ini registran la configuración.
Conexión a MySQL
Para conectarse, use el comando: mysql -h dirección_ip -u usuario -p. Por seguridad, ingrese la contraseña de forma separada después de ejecutar el comando.
Lenguaje de definición de datos (DDL)
El DDL se utiliza para crear objetos en la base de datos, como tablas, vistas e índices.
Crear base de datos
CREATE DATABASE IF NOT EXISTS MiBaseDeDatos;
Crear tabla
CREATE TABLE IF NOT EXISTS Usuarios (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Tipos de datos comunes incluyen:
- Numéricos: TINYINT, INT, BIGINT (con opciones como UNSIGNED o ZEROFILL).
- Cadenas: CHAR (longitud fija), VARCHAR (longitdu variable), TEXT para textos largos.
- Fecha y hora: DATE, DATETIME, TIMESTAMP.
Propiedades de campos:
auto_increment: Incrementa automáticamente valores numéricos.NOT NULL: Prohíbe valores nulos.DEFAULT: Establece un valor predeterminado.
Índices y motores de almacenamiento
Los índices mejoran la velocidad de consultas, pero aumentan el costo de mantenimiento. Tipos incluyen PRIMARY KEY, UNIQUE e INDEX. Los motores como MyISAM (rápido en lecturas) e InnoDB (soporta transacciones) se eligen según las necesidades.
Lenguaje de manipulación de datos (DML)
Incluye operaciones INSERT, UPDATE y DELETE. Ejemplo de inserción:
INSERT INTO Usuarios (nombre, email) VALUES ('Ana López', 'ana@ejemplo.com');
Lenguaje de consulta de datos (DQL)
Utiliza SELECT con cláusulas como FROM, WHERE y ORDER BY. Ejemplo:
SELECT nombre, email FROM Usuarios WHERE id > 10 ORDER BY fecha_registro DESC;
Funciones integradas de MySQL
Funciones comunes incluyen:
- Cadenas: CONCAT(), SUBTSRING(), LOWER().
- Números: ABS(), CEIL(), ROUND().
- Fechas: NOW(), DATE_FORMAT(), UNIX_TIMESTAMP().
PHP y acceso a bases de datos
Extensión mysql (obsoleta)
Funciones como mysql_connect() y mysql_query() se usan para interactuar con MySQL, pero están desaconsejadas.
Extensión mysqli
Ofrece mejoras orientadas a objetos. Ejemplo de conexión y consulta:
<?php
$conexion = new mysqli('localhost', 'usuario', 'contraseña', 'MiBaseDeDatos');
if ($conexion->connect_error) {
die('Error de conexión: ' . $conexion->connect_error);
}
$resultado = $conexion->query("SELECT * FROM Usuarios");
if ($resultado) {
while ($fila = $resultado->fetch_assoc()) {
echo $fila['nombre'] . '<br>';
}
$resultado->free();
}
$conexion->close();
?>
Para consultas preparadas, use mysqli_stmt para prevenir inyección SQL:
<?php
$stmt = $conexion->prepare("INSERT INTO Usuarios (nombre, email) VALUES (?, ?)");
$nombre = 'Carlos Ruiz';
$email = 'carlos@ejemplo.com';
$stmt->bind_param('ss', $nombre, $email);
$stmt->execute();
$stmt->close();
?>
PDO (PHP Data Objects)
Proporciona abstracción para múltiples bases de datos. Ejemplo:
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=MiBaseDeDatos', 'usuario', 'contraseña');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$consulta = $pdo->prepare("SELECT * FROM Usuarios WHERE id > :min_id");
$consulta->execute(['min_id' => 5]);
$filas = $consulta->fetchAll(PDO::FETCH_ASSOC);
foreach ($filas as $fila) {
echo $fila['nombre'] . '<br>';
}
} catch (PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
?>
Sistemas de caché como Memcached
Memcached almacena datos en memoria para acelerar consultas repetidas. Ejemplo de uso en PHP:
<?php
$cache = new Memcache();
$conexion_cache = $cache->connect('localhost', 11211);
if ($conexion_cache) {
$cache->set('clave_usuario', 'datos_almacenados', 0, 300); // TTL de 300 segundos
$dato = $cache->get('clave_usuario');
echo $dato;
}
?>
Control de sesiones y cookies
Cookies
Las cookies almacenan datos en el cliente. Ejemplo:
<?php
setcookie('usuario_id', '123', time() + 3600, '/');
if (isset($_COOKIE['usuario_id'])) {
echo 'ID de usuario: ' . $_COOKIE['usuario_id'];
}
?>
Sesiones
Las sesiones guardan datos en el servidor. Inicie con session_start():
<?php
session_start();
$_SESSION['preferencias'] = ['tema' => 'oscuro', 'idioma' => 'es'];
if (isset($_SESSION['preferencias'])) {
$tema = $_SESSION['preferencias']['tema'];
}
// Para eliminar la sesión:
session_destroy();
?>
Configuraciones avanzadas en php.ini incluyen session.save_handler para personalizar el almacenamiento, como en bases de datos o Memcached.