Como Recuperar e Insertar Arrays en Base de Datos de forma efectiva

Aprende a almacenar y recuperar Arrays PHP en base de datos de forma correcta. Explicación paso a paso y consejo profesional.

arrays en php bases de datos javascript json consultas sql

En este tutorial te voy a explicar cómo almacenar Arrays en base de datos sin importar su complejidad.

Con lo que te voy a explicar a continuación podrás, de formar detallada, almacenar y recuperar tus Arrays con una simple columna de texto en base de datos.

Además podrás usar lo aprendido para cualquier tipo de base de datos relacional ya sea PostgreSQL, MySQL, MariaDB, etc.

Paso a paso te expongo los siguientes conceptos de programación con php y sql:

  1. Explicación del objetivo de almacenar Arrays php en bases de datos.
  2. Cómo almacenar arrays en base de datos.

¿Para qué almacenar Arrays en base de datos?

Lo primero que habría que plantearse es: ¿necesito realmente almacenar un Array en vez de crear una tabla nueva en el SGBD? Esta pregunta tiene una respuesta clara: depende. Todo dependerá del caso que estés resolviendo y las necesidades del proyecto.

Esta funcionalidad es extremadamente útil cuando queremos que una columna en base de datos almacene información compleja.

Por mi parte veo realmente útil almacenar un Array en una columna de base de datos cuando se trata de información difícil de concretar, es decir, registros de datos que pueden aumentar fuera de mi control. Estos registros que difícilmente volverán a repetirse en estructura, y para los cuales deberían de generarse nuevas columnas.

También es útil cuando hablamos de información de configuración de la aplicación, datos que se generan directamente en el código y son específicamente para controlar, por ejemplo, a que lugares puede acceder el usuario o que gama de colores a elegido.

¿Por qué no utilizar la representación de Arrays de la Base de datos?

En algunos SGBD (sistema de gestión de base de datos) como PostgreSQL existe un tipo de datos Array para una columna.

No te recomiendo en absoluto utilizar estos tipos de columnas al desarrollar aplicaciones web. La representación por parte del SGBD no suele dar buenos resultados y algunos casos podríamos resolverlo mucho más rápido con un simple parseo de los campos del Array a una cadena de texto de valores separados por coma: 1, 33, hola, test, mundo.

Cómo almacenar un Array en base de datos

Ahora sí, voy a enseñarte cómo podemos almacenar de forma simple un Array cualquiera en una columna de base de datos, por ejemplo en MySQL.

1. Crear una columna de la base de datos

Lo primero que necesitarás es créarte una columna de la tabla objetivo con capacidad para almacenar un texto grande. Ten en cuenta que el tamaño del campo de texto será proporcional al tamaño del Array que desees almacenar. No es recomendable volverse loco reservando espacio pero si que debes estudiar que cantidad de información se podrá almacenar en el array.

Para un Array de datos de configuración, donde lo que almaceno es un Array Asociativo PHP (clave => valor) con información del tipo es_admin => 1, podríamos utilizar una columna del tipo usual Text.

2. Transformar el array php a texto

Una vez tienes tucolumna de la base de datos lista para almacenar el Array tan solo te falta pasar el Array a texto. Para este cometido voy a utilizar la función PHP json_encode. La función json_encode de PHP transforma un Array a representación de objetos Javascript (JSON).

Un ejemplo PHP de uso:

<?php
$array = array(‘test’ => 1, ‘borrar’ => 0);
$array_texto = json_encode($array);
?>

El resultado de esta transformación ($array_texto) es una cadena de texto codificada de forma especial para poder representar el Array en JSON, lo que en PHP sería un string o cadena de texto. El resultado es parecido al siguiente ejemplo:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Como curiosidad,  si estás familiarizado con el formato JSON verás cómo esta salida cumple con su estructura y que esta misma función (json_encode) serviría para transferir Arrays PHP a Javascript.

Por último, a mí me gusta, antes de almacenar este texto directamente en base de datos, codificarlo en base64 para evitar problemas de representación de caracteres. Si no sabes lo que es, te dejo con una pequeña definición de la Wikipedia:

Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII. Esto ha propiciado su uso para codificación de correos electrónicos, PGP y otras aplicaciones.

El texto codificado resultado de esta transformación del Array en Json a base64 del anterior ejemplo es:

eyJhIjoxLCJiIjoyLCJjIjozLCJkIjo0LCJlIjo1fQ==

Ya tienes el Array transformado y codificado, ahora ya puedes almacenarlo en la base de datos con SQL como un texto cualquiera:

INSERT INTO tabla_destino (array_codificado) VALUES (‘$array_php_codificado’);

Cómo recuperar el Array desde la base de datos

Ahora vamos a ver el proceso de cómo recuperar el Array codificado en el punto anterior y dejarlo listo para su uso en tu código PHP.

Lo primero: tienes que recuperar Array con una consulta SELECT cualquiera y la que más te guste de entre las posibles formas de leer de base de datos una columna.

Una vez leída esta variable, tienes que realizar la transformación inversa al proceso de inserción en el SGBD (como MySQL).

Primero descodificas desde base64:

<?php
$json = base64_decode($columna_array);
Y para terminar descodificas desde JSON:
$arrayPHP = json_decode($json ,true);
?>

El array ya se encuentra en el mismo estado que antes de insertarlo. Ya estás listo para trabajar con Arrays php y consultas de forma sencilla y eficiente.

Extra: Utilidad para codificiar y descodificar Arrays de Base de datos

Como me gusta terminar cada tutorial con un consejo de desarrollo profesional, voy a dejarte un ejemplo de buen hacer para utilizar la solución trabajada. Una utilidad PHP para codificar y descodificar Arrays a tu antojo y que debería estar disponible en tu proyecto.

Lo ideal es que tengas una clase php de utilidades en un fichero con el mismo nombre (utilHelper.php) y en ella añadir las dos funciones:

class UtilHelper {
   /* Crea un string codificado a partir de un array
   * @param Array array: array asociativo clave => valor
   * @return cadena de texto con el array listo para insertarse en BD
   */
   static function arrayEncode($array){
      return base64_encode(json_encode($array));
   }

   /* Crea un array a partir de un string codificado
   * @param String array_texto : string codificado de un array asociativo clave => valor
   * @return Array php
   */
   static function arrayDecode($array_texto){
      return json_decode((base64_decode($array)),true);
   }
}

Si incluyes este fichero en tu script php dónde deseas almacenar o recuperar un Array desde base de datos podrás utilizar las utilidades:

<?php
require_once ‘utilHelper.php’;
 
$array = [‘a’ => 1, ‘b’ => 2];
$array_codificado = UtilHelper::arrayEncode($array);
 
//aquí puedes insertar el array en BD
 
$array_deco = UtilHelper::arrayDecode($array_codificado);
 
// listo!!
?>

Conclusión

Almacenar Arrays en base de datos es extremadamente sencillo, al igual que recuperarlos.

Ya sea por legibilidad, por aumentar la productividad como desarrollador o por requerimientos del proyecto, creo que utilizar sabiamente esta posibilidad en tus desarrollos te puede permitir extender la funcionalidad de tu base de datos, evitandola la habitual necesidad de estar aumentando el número de columnas de nuestras tablas hasta hacerlas insostenbles y tediosas de utilizar.

Repaso de lo explicado

Descripción de los pasos para insertar el Array asociativo en Base de Datos:

  1. Codificar el array en JSON
  2. Codificar el JSON en base64
  3. Insertar en base de datos como cualquier valor de tipo VARCHAR o TEXT

Descripción de los pasos para recuperar y decodificar el Array desde Base de Datos:

  1. Recuperar, de forma habitual, de una tabla de la base de datos la columna de tipo VARCHAR o TEXT.
  2. Descodificar el String desde base64 para obtener un resultado JSON.
  3. Descodificar el JSON para obtener un Array.

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.