Top 13 errores MySQL que cometen los programadores
Top 13 errores MySQL que cometen los programadores de PHP. El manejo de base de datos es muy importante para cualquier sistema web y/o página web. Por lo tanto, los programadores pueden elegir diferentes lenguajes de programación como ser: (PHP, Python, Ruby on Rails, entre otras). Ahora, casi la mayoría utilizan MySql como base principal e imprescindible para el manejo de la información de sus sistemas.
Una base de datos en un sistema es un componente imprescindible para la mayoría de sistemas Web. Sin embargo, si estás usando PHP, probablemente estés usando MySQL como gestor de base de datos.
El lenguaje PHP posee una curva de aprendizaje muy baja (es decir, es fácil de aprender). Por lo tanto, la mayoría de los nuevos desarrolladores pueden programar códigos rápidamente en pocas horas de inversión.
Top 13 errores MySQL que cometen los programadores de PHP
A continuación, mostraremos una lista de 13 errores más comunes que suelen cometer los nuevos programadores en el tema de PHP y MySQL.
-
Motor MyISAM en vez de InnoDB
Recordemos que MySQL tiene una gran variedad de motores. Sin embargo, es probable que nos hayamos encontrado casi siempre con MyISAM por defecto y/o motor InnoDB para gestionar la información.
El motor MyISAM de MySQL es por defecto. Por lo tanto, si estamos creando una base de datos básica o de pruebas podemos usar MyISAM.
Ahora, MyISAM no soporta restricciones de claves foráneas o transacciones, esenciales para mantener la integridad referencial de los datos. Sin embargo, toda la tabla se bloquea cuando el sistema ingresa o actualiza un registro, lo que provoca un efecto adverso en el rendimiento de la aplicación, cuando esta por el paso del tiempo crece positivamente.
La recomendación es migrar al motor de MySQL llamado: Motor InnoDB, para procesar la información.
-
Las funciones MySQL usando PHP: En desuso
PHP desde su lanzamiento nos brinda de librerías de funciones especiales por defecto para el manejo y conexión con MySQL. Por lo tanto, la mayoría de sistemas dependen de las funciones base como ser: mysql_connect, mysql_query, mysql_fetch_assoc, etc. Ahora, el propio PHP nos dice lo siguiente:
Hoy en día se recomienda el uso de la extensión mysqli para realizar conexiones con MySQL.
La extensión mejorada de MySQL (mysqli), tiene varias ventajas para nuestros sistemas web:
- Usa una interfaz orientada a objetos.
- Declaraciones preparadas (que nos ayudan a prevenir inyecciones SQL y a incrementar el rendimiento).
- Muchas declaraciones y soporte de transacciones de información.
- Más robusto y seguro para las conexiones con el servidor de base de datos.
Se recomienda el uso de PDO si deseamos mantener un soporte a múltiples bases de datos.
3. Login de usuarios con PHP
El login de usuario es uno de los problemas más resaltante de todo sistema. Por lo tanto, nunca confiar lo que el usuario ingresa en los campos de login. Sin embargo, esta es muy importante validar la cadena de texto que es enviada al servidor por parte del usuario. Ahora, las inyecciones SQL dependen de códigos como este para tener éxito:
<?php $usuario= $_POST["usuario"]; $password = $_POST["password"]; $sql = "SELECT user_id FROM login WHERE usuario='$usuario' AND password='$password'"; // Ejecutar consulta.. ?>
Las debilidades del sistema y esto fácilmente podría ser crackeado ingresando “admin’ ; –“ en el campo del nombre de usuario. La consulta del SQL quedaría como sigue y tendría éxito:
<?php SELECT user_id FROM login WHERE usuario='admin'; ?>
Las personas maliciosas podría iniciar sesión como “admin”, sin necesidad de poseer la clave: Sin embargo, esto ya que esta comentada en el SQL.
4. Usar más PHP que el SQL
Generalmente los nuevos programadores resuelven todo al lado de PHP, dejando a un costado al gestor MySQL para resolver problemas. Por lo tanto, esto nos puede llevar a cargar nuestro script PHP y hacerlo más lento. Por ejemplo, en vez de usar las función nativa de mysql en las consultas para sacar promedios como es el «AVG()», usamos un ciclo en PHP para calcular el promedio.
Hay que tener cuidado con las consultas SQL dentro de los ciclos de PHP. Por lo general, siempre es recomendable realizar una consulta y luego recorrer sus resultados.
5. No usar UTF-8 en MySQL
Este apartado es muy importante en todo sistema web. Por lo tanto, el uso de «UTF-8» resuelve muchos problemas acerca de los caracteres especiales. En nuestros ficheros PHP tenemos que declarar esta etiqueta de la siguiente manera:
<meta charset="UTF-8">
Ahora, en MySQL también tenemos que declarar el «UTF8» de la siguiente manera.
<?php $servidor= "localhost"; $usuario= "root"; $password = ""; $nombreBD= "php_buscador"; $db = new mysqli($servidor, $usuario, $password, $nombreBD); if ($db->connect_error) { die("la conexión ha fallado: " . $db->connect_error); } // AGREGANDO UTF8 EN LA CONEXIÓN if (!$db->set_charset("utf8")) { printf("Error al cargar el conjunto de caracteres utf8: %s\n", $db->error); exit(); } else { printf("Conjunto de caracteres actual: %s\n", $db->character_set_name()); } ?>
-
Usar los tipos de datos equivocados
Para crear columnas en MySQL. Este nos ofrece una gran variedad de tipos de datos. Por ejemplo tenemos los siguientes:
- Numéricos. Para manejar números tenemos que elegir entre estos tipos de datos, veamos ejemplos: INT (INTEGER), SMALLINT, TINYINT, MEDIUMINT, BIGINT, etc.
- Cadena. Los tipos de cadena podemos elegir entre los siguientes. Veamos ejemplos: CHAR, VARCHAR, TINYBLOB, BLOB, etc.
- Fecha. Si estamos almacenando una fecha, hay que guardarla en un campo DATE o DATETIME.
Por lo tanto, si deseamos almacenar algún tipo de información tenemos que elegir con mucho cuidado que tipo de campo debemos de elegir para almacenar nuestra información y/o la información de una empresa.
-
No optimizar tus consultas SQL
Para gestionar un óptimo rendimiento en nuestros sistemas web, primeramente tenemos que optimizar nuestras consultas SQL. Recordemos, que el 99% del rendimiento del lenguaje PHP se debe a la base de datos y una consulta SQL mal optimizada podría causar ciclos interminables en nuestra aplicación.
Se recomienda optimizar al máximo las herramientas de MySQL en Nuestro PHPMyAdmin.
-
Usar (*) en las consultas SELECT de MySQL
Básicamente el uso del (*) en la estructura SELECT no es conveniente. Por lo tanto, esta opción devuelve todas las columnas de una tabla, en algunos casos las tablas poseen 50 a 70 columnas y al usar (*) llama a todas esas columnas. Sin embargo, en realidad solo usaríamos 2 por ejemplo.
Recomendación:
Para optimizar las consultas SQL, sólo debemos extraer las columnas que necesitamos.
-
Olvidarse de hacer backups
Este aspecto es crucial para el desarrollador de sistemas y/o desarrollador del área de una empresa. Ahora, las copias de seguridad son vitales para salvaguardar la importante información de nuestra organización.
¿Porque sacar copias de seguridad?
Tenemos que tener en claro algo. En sistemas nada es seguro al 100%, algunas casos que puede suceder:
- Los discos duros pueden malograrse.
- Los servidores pueden quemarse y/o vida útil está a su fin.
- Accesos no autorizados (Hackers), borrados de nuestra información y/o alteración del mismo.
Por lo tanto, la perdida de nuestros datos MySQL serían catastróficos para cualquier organización y está en el desarrollador o encargado del sistema de sacar copias de seguridad en un determinado periodo de tiempo. Sin embargo, si algo sucede con nuestra información podemos restaurarlo rápidamente sin contratiempos.
-
Sub o Sobre Indexación
Esto es primordial. Los índices de MySQL deben aplicarse a cualquier campo (Columna) que vaya a ser llamada en la cláusula WHERE de una consulta SELECT (SQL).
Por ejemplo
- Usaremos una tabla llamada (Usuarios) con un ID numérico (clave primaria) y una dirección de correo electrónico. Sin embargo, durante la sesión de usuario. Ahora, Usando una consulta MySQL debe localizar el ID correcto al buscar el correo electrónico.
- Con un índice, MySQL podría usar una estructura tipo algoritmo de búsqueda rápida para localizar el correo electrónico casi de manera instantáneamente. Sin un índice, MySQL debe comprobar todos los registros en orden, hasta encontrar la dirección de correo.
-
Otras bases de datos
No considerar otras bases de datos.
Hoy en día existe gran cantidad de base de datos para almacenar la información. Veamos algunos ejemplos.
- MariaDB. MariaDB es una bifurcación, o copia, de un proyecto de software en un momento dado, que se crea inicialmente para continuar el desarrollo en otra dirección. Estamos hablando de la bifurcación MySQL, porque este ha sido comprado por un gestor de base de datos de pago.
- PostgreSQL. Este sistema gestor de base de datos es de código libre y multiplataforma, es decir puede funcionar en varios sistemas operativos y plataformas sin problema alguno. Es un sistema de grandes prestaciones y posee un mayor desempeño que MySQL. Por lo tanto, es capaz de trabajar con proyectos mayores, sin aumentar excesivamente su complejidad.
- SQLite. Este gestor de base de datos relacional, posee caracteristicvas similares a MySQL o PostgreSQL, pero en este caso mucho más ligero. Sin embargo, también es de código abierto como los anteriores bases de datos mencionadas y su principal característica que la hace diferente a las demás es que no necesita la instalación en un servidor, como ocurre con la mayoría de las bases de datos, sino que se integra en los lenguajes de programación o plataformas web o móviles.
-
Usar mysql_connect
Usar este tipo de conexión PHP & MySQL ya está en desuso según su página oficial. Esta extensión PHP fue declarada obsoleta en la versión PHP 5.5.0 y eliminada por completo en la versión PHP 7.0.0. Sin embargo, en su lugar debería utilizarse las extensiones MySQLi o PDO_MySQL.
Ahora si usamos este tipo de conexión estamos poniendo en riesgo nuestro sistema web. Ahora si usamos la versión PHP 7. Simplemente la ignora y nuestra error de función desconocida.
Recordemos que la versión del PHP 7 es muy recomendable por su seguridad y el más importante procesa más rápido la información. Concluyendo, es el doble de rápido para mostrar la información.
<?php $enlace = mysql_connect('localhost', 'usuario_mysql', 'contraseña_mysql'); if (!$enlace) { die('No pudo conectarse: ' . mysql_error()); } echo 'Conectado satisfactoriamente'; mysql_close($enlace); ?>
Lo recomendable es usar la siguiente conexión
$mysqli = new mysqli('127.0.0.1', 'root', 'root', 'basededatos1'); $mysqli->set_charset("utf8");
Y realizar las consultas de la siguiente manera
$res = $mysqli->query("SELECT * FROM personas"); while($f = $res->fetch_object()){ echo $f->nombre.' <br/>'; }
-
Olvidar la cláusula Where en DELETE
Explicación de la sintaxis DELETE:
- Lo primordial es determinar el nombre de la tabla de la cual eliminaremos los registros.
- La condición que debe cumplir la fila para ser eliminada de la tabla.
- El orden de los registros a ser eliminados.
- Límite de filas a eliminar de la tabla.
Precauciones con DELETE en MySQL
Si deseamos aplicar esta cláusula de MySQL es recomendable sacar primero una copia de seguridad. Por lo tanto, omitir esta advertencia podría ser catastrófico para la empresa en la cual estamos laborando. Sin embargo, hay que tener cuidado con esta sentencia ya que si ignoramos las clausulas WHERE o LIMIT podemos llegar a eliminar todos los registros de la tabla.
CONCLUSIÓN
- Una vez mencionado los 13 errores que los programadores generalmente cometen. Podemos ir corrigiendo estos errores en nuestros sistemas.
- Nosotros como programadores debemos de tomar medidas de precaución para el manejo de la información y más aún si esa información es de una empresa en particular.
- La recomendación que podemos dar es sacar una copia antes de manipular los ficheros PHP y/o tablas y registros de la base de datos.