Migraciones: cuando los warnings se convierten en errors

Los que ya han acometido una migración saben que no es algo bonito o atractivo, sino un proceso más o menos tedioso cuyo objetivo es que todo se quede como estaba antes. Por eso es tan desagradecido, pues no implica ningún avance o mejora, simplemente se actualiza el código a nuevas versiones, para evitar que todo deje de funcionar cuando una de esas versiones se pone en marcha.

En mi caso, la migración se ha visto forzada por el proveedor de servicios, que actualizará sus bases de datos a MySQL 8. Este cambio supone que algunas consultas SQL dejan de funcionar, con lo que hay que reescribirlas para adaptarse a las nuevas reglas del juego.

Pero claro, ya puestos a actualizarnos… pues resulta que las conexiones de PHP con la base de datos las hacíamos con mysql_pconnect, y el tratamiento de datos con mysql_select_db, mysql_fetch_array… y si buscamos estos conceptos, encontramos un “no tranquilizador” mensaje:

Obsolescencia de código

“¿Me voy a hacer una migración para que luego, cuando el servidor deje de utilizar versiones antiguas de PHP, hacer otra?”. Demasiados viajes… prefiero uno y que los resultados duren. Así que, antes de revisar las SQLs, mejor cambiar el tipo de conexión por el que nos indica la advertencia.

“Me hago un reemplazar en toda la carpeta de archivos y listo”, pensé. Pero no. Os pongo un ejemplo de uno de los cambios que exige “manualidad”:

mysql_query($query, $cnn) --> mysqli_query($cnn, $query)

Si todas las queries se llamaran igual, podría hacer un reemplazar y listo. Pero claro, cada query lleva su nombre identificativo. Así, que toca ponerse el mono y buscar todas y cambiarlas (como un mono).

Buscar y reemplazar a mano

Luego te irás encontrando sorpresas por el camino, no creas que lo planificado será lo único que cambies… En este caso, por ejemplo, me he encontrado que la base de datos antes admitía que no le pasaras valores en un INSERT que no tuvieran valor por defecto. Si no recuerdo mal, antes daba warning, pero ya sabemos que los warnings crecen, se hacen mayores, y se convierten en errores. Valores por defecto en los campos en cuestión y listo.

Y ya con estas sentencias actualizadas, me recorro el sitio y voy comprobando las SQL que petan. La mayoría son cosas de fechas y temas de GROUP BY… La otra opción es buscar los archivos que tengan esas cosas y corregirlos, pero yo prefiero la primera opción, no sea que deje de funcionar alguna más de la que me imagino…

Recuerda: cuando acabes, estarás como antes. Además este tipo de cosas se hacen cerca de la fecha límite, con lo que, además de lo “divertido”, puedes añadir las prisas. Un caramelito ?

¡Hasta la semana que viene!

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.