EspañolDeutschFrançaisItalianoPortuguêsРусскийΕλληνικά日本語中文(简体)हिन्दी; हिंदीالعربية
PF Preguntas - Foro

Los 10 principales errores sobre MySQL que cometemos los programadores de PHP

Webmasters y SEO  
 
Los 10 principales errores sobre MySQL que cometemos los programadores de PHP

Cuando programas en PHP y tu aplicación comienza a tener cierta envergadura, lo más lógico es que necesites apoyarte en un sistema de gestión de bases de datos para almacenar y manipular cualquier dato referente a la misma. En el caso de PHP, el sistema usado en mayor medida es MySQL.

No resulta fácil construir una base de datos sólida, fiable, que esté libre de inconsistencias y vulnerabilidades y que, por tanto, tenga una estructura en base a alguna de las formas normales más comúnmente usadas. Por lo que es habitual que, como programadores en PHP, caigamos en alguno de los principales errores a la hora de trabajar con MySQL.

 

1. Usar MyISAM en lugar de InnoDB

MyISAM es el motor configurado por defecto en la instalación de MySQL pero, a menos que aún tengas tu base de datos en desarrollo o tu proyecto sea bastante simple, es aconsejable usar InnoDB. Éste admite transacciones, esenciales para la integridad de los datos. Además, a la hora de insertar o actualizar un registro, solo bloquea a éste, y no a la tabla entera como hace MyISAM, teniendo un efecto positivo sobre el rendimiento, sobre todo en las escrituras.

 

2. No usar las funciones adecuadas para MySQL de PHP

PHP proporciona funciones específicas para la conexión y uso de MySQL. Funciones como mysql_connect, mysql_query, … Estas funciones resultaron mejoradas para versiones de PHP igual o superior a la 4.1.3, por lo que es aconsejable usar esta última, llamada MySQLi. Ésta presenta una serie de ventajas como una intefaz orientada a objetos, prevención de ataques de inyección de SQL mediante las preparedStatements, aumento del rendimiento, etc.

 

3. No sanear las entradas de usuario

Al no sanear las entradas del usuario y usarlas para crear una sentencia SQL, la cual ejecutaremos sobre la base de datos, estamos dando lugar a una vulnerabilidad permitiendo la inyección de código SQL en los campos desde los cuales tomamos dichos valores.

Si, por ejemplo, estamos manejando un login de usuario, y al obtener los datos del formulario los asignamos directamente de la siguiente forma:

Si en el campo nombre introdujéramos el valor “admin’; –“ (sin comillas), la cadena SQL resultante sería la siguiente:

Con lo que el usuario accedería directamente sin introducir ningún tipo de contraseña, además de acceder como administrador, si admin fuese el nombre de algún usuario administrador.

 

4. No usar la codificación UTF-8

Utilizar esta codificación evita muchos problemas de internacionalización, ya que debemos tener en cuenta que nuestro sitio web no solamente será accedido desde nuestro propio país, sino desde países cuyos juegos de caracteres difieren mucho de los nuestros.

 

5. Hacerlo todo mediante PHP

Es habitual realizar toda la codificación mediante el lenguaje PHP, incluso aquellas funciones que resultarían mucho más rápidas si las realizara el propio gestor de bases de datos. Por ejemplo, utilizar un bucle en PHP para calcular un promedio, sumando todos los valores de un conjunto de registros, en vez de usar la función nativa de MySQL, AVG().

De la misma forma, existe la posibilidad de codificar funciones y procedimientos internos en la propia base de datos, favoreciendo el rendimiento de nuestra aplicación en términos globales.

 

6. No optimizar las consultas

El 99% de los problemas de rendimiento de una aplicación en PHP es causada por la base de datos. Hay que ser consciente de que una simple mala consulta puede causar un cuello de botella en nuestro sitio web, por lo que es recomendable realizar una optimización de las consultas más pesadas.

Existen aplicaciones y scripts que revisarán tu servidor MySQL y te darán consejos para mejorar su rendimiento, así como te mostrarán las posibles consultas que deberían optimizarse.

 

7. Utilizar tipos de datos incorrectos

MySQL ofrece un conjunto de tipos de datos variado (numérico, cadena, hora, fecha, …). Si vas a almacenar una fecha, usa el tipo DATE o DATETIME, en vez de usar un INTEGER o STRING, que harán más complicada las consultas.

A menudo, es tentador crear tus propios tipos de datos y guardarlos en la base de datos como objetos serializados de PHP. Aunque el manejo de la base de datos será más fácil, te impedirá realizar fácilmente búsquedas y consultas sobre datos almacenados.

 

8. Usar el asterisco (*) en las consultas SELECT

Nunca uses el asterisco en las consultas SELECT, a menos que sea estríctamente necesario. Intenta siempre hacer una consulta sobre los campos que realmente necesites, los demás son recursos gastados en vano.

 

9. No indexación o sobre-indexación

Normalmente, los índices se aplican a cualquier columna sobre la que una consulta SELECT realizará su WHERE, por lo que resulta útil el crear índices para las consultas que más recursos consumen y aquellas que normalmente son más usadas.

De la misma forma, el añadir índices a cada columna puede hacer que caiga el rendimiento del servidor debido a que éstos deben ser regenerados durante cada inserción o actualización de la tabla.

 

10. Olvidarte de hacer copias de seguridad

Aunque no lo creas, las bases de datos fallan, así como los discos duros o cualquier otro hardware o software que pueda tener el servidor donde tengas alojadas tus bases de datos. Si tu aplicativo web tiene cierta importancia, imagina el perder de golpe toda la información sobre el mismo.

Para evitar esto, acostumbra a hacer copias de seguridad periódicas, o simplemente, prográmalas para que se realicen automáticamente.

 

Cómo puedes ver, estos son solo 10 de los principales errores que los programadores en PHP podemos o solemos cometer cuando trabajamos con el gestor de bases de datos MySQL. Ni que decir tiene que, aparte de este, tan conocido, sistema de bases de datos, existen otras soluciones igualmente fiables y buenas, y que también pueden ser opción para cualquiera de los proyectos o aplicativos web que tengamos que desarrollar bajo PHP.

Déjanos un comentario o entra al  Foro
Share on Facebook Tweet about this on Twitter Share on Google+ Pin on Pinterest Share on Reddit Share on VK Share on StumbleUpon Share on Tumblr Share on LinkedIn Email this to someone Print this page

Artículos relacionados