viernes, 28 de septiembre de 2018

Acceder a BD SQLite desde la RED.

En esta ocasión quiero compartir una estrategia sencilla (en extremo sencilla) para consultar datos (SELECT) en una BD SQLite que reside una PC o server en una red LAN.

Como es conocido el SGBD SQLite no es multiusuario y NO esta pensado para el acceso concurrente en un entorno de red. No obstante por determinadas circunstancias pudiera ser necesario acceder a una BD SQLite que reside remotamente en un server de red. A mi se me presento tal situación.

La estrategia general es un "webservices", cerrado entre comillas porque esta, en particular no lo es, estrictamente hablando. La idea es:

Instalar un servidor Web Apache y con script PHP devolver los resultado en formato JSON. Estos resultados en formato JSON pueden ser consumidos por cualquier aplicacion Desktop para PC, Android, IOs y etc. para dispositivos moviles y aplicaciones web.

Aqui hablamos de estrategia sencilla porque decidimos solo ejecutar consultas SELECT sobre el origen de datos. Y crear un script PHP por cada select sql necesario.

A modo de ejemplo se muestra un script PHP para hacer un select sobre el origen de datos SQLite. Debemos acotar que la BD SQLite reside en un PC Ubuntu 16.04 Desktop.

Suponiendo que nuestra BD tiene una tabla customers y de la cual queremos obtener los registros cuyo campo id sea igual 5.

El script PHP lo creamos en una carpeta del server Web en la PC Ubuntu, habitualmente en /var/www/carpetaweb para Apache ó /opt/lampp/htdocs/carpetaweb para LAMPP. Nuestra BD reside fisicamente en /home/user/datos.sqlite

customers_byID.php

<?php

// Abrimos la BD
$db = new PDO('sqlite:/home/user/datos.sqlite');

// Leemos el parametro enviado por GET
$id=$_GET["id"];

// Definimos el Select SQL en una variable
$sql_qry="SELECT * FROM customers Where id='$id'";

// Ejecutamos la consulta
$result = $db->query($sql_qry);

$result->setFetchMode(PDO::FETCH_ASSOC);

// Obtenemos los resultados
$row = $result->fetchAll();

// Codificamos y devolvemos los resultados en formato JSON
echo json_encode($row);

?>

Ahora nos queda desde la aplicacion consumidora invocar el script PHP y parsear el resultado.

Bastante sencillo. Pero, debemos tener en cuenta varias cosas..

  • La carpeta /home/user/ debe tener permisos 777; pueden establecerse escribiendo chmod 777 -R /home/user/ en la consola linux
  • Pueden implentarse consultas INSERT y UPDATE pero con cuidado, recordar que SQLite no es multiusuario.
  • Podemos pasar los parametros a la consulta por POST, solo habria que utilizar la función $_POST() en PHP en lugar de $_GET()
  • Todo fue probado usando LAMPP con PHP > 5.x