Principales errores de desarrolladores PHP principiantes — parte 4: Trabajo con datos
Continuamos la serie de artículos para quienes estudian PHP y quieren escribir código de mayor calidad. En esta parte analizaremos tres errores críticos relacionados con el procesamiento de datos de usuario, el almacenamiento en caché y la tipificación estricta. Si te encuentras en la etapa de aprendizaje de PHP, estos ejemplos te ayudarán a evitar problemas típicos en proyectos reales.
1. Confiar en los datos de los arrays superglobales
Uno de los errores más comunes para desarrolladores PHP principiantes es usar datos de $_GET, $_POST o $_REQUEST sin verificación ni filtrado. Esto es un camino directo a ataques XSS e inyecciones SQL.
Enfoque incorrecto
<?php// ¡Peligroso! El usuario puede enviar un script$name = $_POST['username'];echo "¡Hola, $name!";?>Enfoque correcto
<?php// Usamos filtrado y escape$name = htmlspecialchars(strip_tags(trim($_POST['username'] ?? '')), ENT_QUOTES, 'UTF-8');echo "¡Hola, " . $name . "!";?>¿Qué hacer? Siempre procesa los datos entrantes. Para trabajar con bases de datos usa consultas preparadas (PDO o MySQLi), y para la salida — htmlspecialchars(). Esto es la base de la seguridad en programación en PHP.
2. Falta de almacenamiento en caché de consultas pesadas
Muchos novatos ejecutan la misma consulta SQL o un cálculo complejo en cada actualización de página. Esto mata el rendimiento, especialmente si hay muchas consultas.
Ejemplo del problema
<?php// Cada vez solicitamos datos de la BD$users = $db->query("SELECT * FROM users WHERE active = 1")->fetchAll();foreach ($users as $user) { echo $user['name'];}?>Solución con caché
<?php// Usamos almacenamiento en caché simple de archivos$cacheFile = 'cache/users_active.cache';$cacheTime = 300; // 5 minutos
if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) { $users = unserialize(file_get_contents($cacheFile));} else { $users = $db->query("SELECT * FROM users WHERE active = 1")->fetchAll(); file_put_contents($cacheFile, serialize($users));}
foreach ($users as $user) { echo $user['name'];}?>Para proyectos más complejos usa Memcached o Redis. Esto acelerará el aprendizaje de PHP en cuanto a la comprensión de la arquitectura de aplicaciones de alta carga.
3. Ignorar la tipificación estricta
PHP es un lenguaje de tipificación dinámica, pero desde la versión 7.0 existe la posibilidad de activar el modo estricto. Los principiantes a menudo olvidan esto, lo que lleva a errores inesperados.
Situación típica
<?phpfunction calculateSum($a, $b) { return $a + $b;}
echo calculateSum(10, '5'); // Resultado: 15 (la cadena se convirtió en número)?>Corrección
<?phpdeclare(strict_types=1); // Activamos el modo estricto
function calculateSum(int $a, int $b): int { return $a + $b;}
// echo calculateSum(10, '5'); // Fatal error: Uncaught TypeErrorecho calculateSum(10, 5); // 15?>La tipificación estricta ayuda a detectar errores en la etapa de desarrollo, no en producción. Recomendamos a todos los PHP para principiantes acostumbrarse desde ya a especificar los tipos de argumentos y valores de retorno.
Bonus: trabajar con sesiones sin verificación
Otro error frecuente es escribir en la sesión sin verificar la existencia de la clave. Esto puede provocar advertencias.
<?phpsession_start();
// Error: si la clave no existe, obtendremos una advertencia$_SESSION['counter'] = $_SESSION['counter'] + 1;
// Correcto$_SESSION['counter'] = ($_SESSION['counter'] ?? 0) + 1;?>