Bienvenido a SOFTr utils. En este sitio encontrarás diversos recursos y/o utilidades para la programación nuestra de cada día, desarrolladas por SOFTr. Por ahora quizás verás uno que otro recurso, ya que vamos empezando, pero esperamos poder enriquecer a la brevedad esta sección. Podrás, además, encontrar múltiples tips, artículos, manuales y tutoriales relacionados todos con el mundo de la programación en el blog oficial de SOFTr, techNiq.

Último recurso de SOFTr utils:

Noviembre 20 0

Capa de Persistencia (acceso a datos)

softrDB

Qué es?

softrDB es una pequeña clase hecha en PHP para facilitar el acceso a base de datos. Funciona como una capa de persistencia.

Cómo funciona?

softrDB gestiona un archivo con extensión .json, ya que dicho archivo está escrito en esa notación. Ésta contiene en formato JSON todos los queries que se va a utilizar en una aplicación web PHP. Una vez instanceada la clase softrDB, se pueden ejecutar los métodos de la misma, y traer información de la base de datos. Además permite la utilización de argumentos, que es posible pasarle al query que se desea ejecutar del archivo con extensión JSON.

Elementos que lo conforman

  • cn.php
    El archivo de configuración de softrDB y conexión con base de datos.
  • JSON.php
    Libreria desarrollada por http://json.org/, que facilita el uso de estructuras JSON.
  • softrDB.php
    La clase con los métodos para la capa de persistencia.
  • queries.php
    Archivo en notación JSON con los queries, clasificados en módulos, a utilizar en el proyecto.

Configuración

  1. En el archivo cn.php:
    • Colocar la ruta donde se encuentran los archivos de la capa de Persistencia. Por default se verá $path=’Persistence/’, en donde ‘Persistence/’ es el valor que deberá cambiarse en caso de que los archivos sean ubicados en una carpeta distinta
    • Colocar los datos de la base de datos.
      $hostname = “localhost”;
      $database = “ejemplo01″;
      $username = “root”;
      $password = “”;
  2. Colocar los queries el archivo queries.json . Deben tomarse en cuenta las siguientes consideraciones:
    • Iniciar el archivo con ‘{’ y terminar con ‘}’ para indicar que utilizaremos notación JSON
    • En primer término irán los nombres de los módulos en que se clasificaran los queries, éstos no van dentro de comillas simples ni dobles. Posteriormente, dentro de cada módulo los queries, que se compondrán de un ID con las mismas caracteristicas de los nombres de los módulos, seguidos de su valor que es propiamente el query.
    • Dentro del query, se pueden poner argumentos, que serán sustituídos con los valores al llamar el método. La nomenclatura a utilizar es ‘?A’ para el primer argumento, ‘?B’ para el segundo, ‘?C’ para el tercero, y así para cada letra del alfabeto. Se puede utilizar más de una vez un mismo argumento, es decir, ?A puede aparecer muchas veces en un mismo query, conservando el valor que se le haya mandado en un inicio.
    • Ver el ejemplo para comprender lo anterior mejor:

      
      {
      	customer:{
      		CUS_L01:’SELECT * FROM mcustomer;’,
      		CUS_L02:’SELECT * FROM mcustomer C INNER JOIN ccountry P ON C.cCou_ID=P.cCou_ID;’,
      		CUS_L03:’SELECT * FROM mcustomer limit 5;’
      	},
      	country:{
      		COU_L01:’SELECT * FROM ccountry;’,
      		COU_L02:’SELECT * FROM ccountry WHERE cCou_Name like “%?A%”;’,
      		COU_U01:’UPDATE ccountry SET cCou_Name=”JAPON” WHERE cCou_ID=?A LIMIT 1;’
      	}
      }
                          

      En este ejemplo, tenemos dos módulos: customer y country. cada uno de ellos tiene 3 queries. Se propone la nomenclatura para los nombres de identificación de los queries como sigue: NOM_NXX, donde “NOM” son 3 letras relacionadas con el nombre del módulo, “N” es una letra que nos indica qué tipo de query és (L=LOAD o SELECT, U=UPDATE, I=INSERT, D=DELETE), y “XX” es un número consecutivo. Estos nombre de ID de los queries se sugieren para mayor identificación, pero no tiene que ver con el funcionamiento de la clase.

Utilización

  • Requerir el archivo cn.php: require “Persistence/cn.php”;
  • Instancear la clase: $DB=new softrDB(’Persistence/queries.json’,'ejemplo01′);
    El primer parámetro es la ruta donde se encuentra el archivo de queries con extensión .json y el segundo argumento es opcional, en caso de que se quiera poner un identificador para poder hacer uso de más de un archivo de queries con extensión .json
  • Ejecutar el query. $rsCustomers=$DB->loadQuery(”customer”,”CUS_L01″);
    El primer parámetro es el módulo en el que se clasificó los queries, y el segundo argumento es el nombre del query a ejecutar.
  • $rsCustomers en el punto anterior, es una variable que recibirá un arreglo con los datos que haya regresado el query. Esto es sólo en el caso de un SELECT, para los casos de UPDATE, INSERT o DELETE, no se requiere asignar a una variable. basta con $DB->loadQuery(”country”,”COU_U01″);. En el caso de SELECT, una vez asignado a una variable, ésta recibirá un arreglo con todos los datos devueltos por el query. Si ejecutamos $rsCustomers=$DB->loadQuery(”customer”,”CUS_L01″);, ahora $rsCustomers será un arreglo con la información de la tabla mcustomer, y si lo recorremos así
    <?php
    	$rsCustomers=$DB->loadQuery("customer","CUS_L01");
    	foreach($rsCustomers as $item){?>
    		nombre: <strong><?=$item['mCus_Name'];?></strong>
    <?php }?>

    Obtendremos:

    nombre: Daniel Niquet
    nombre: Andrés Gutierrez
    nombre: Joan Castro
    nombre: Leonardo Valenzuela
    nombre: Luis Antonio Germon

    nombre: Lorenzo Prieto
    nombre: Andrea Lozano
    nombre: Ana Torres
    nombre: Juan Lopez
    nombre: Lorena Gasca

Métodos de la clase

  • $DB->loadQuery(”mod”,”query”,”parametro1|parametro2|parametro3″)
    Ejecuta un query. El primer argumento es el módulo del query, el segundo el ID del query a ejecutar, y el tercero los argumentos, los cuales se enviarán separados por el caracter PIPE “|”. Ejemplo: $DB->loadQuery(”country”,”COU_U01″,”2″). Al llamar a COU_U01 se referirá a ‘UPDATE ccountry SET cCou_Name=”JAPON” WHERE cCou_ID=?A;’, y al sustituir el parámetro enviado quedará como ‘UPDATE ccountry SET cCou_Name=”JAPON” WHERE cCou_ID=2;’
  • $DB->outQuery()
    Función para ayuda de debug. Imprime el query formado en pantalla. Útil sobre todo en el uso de parámetros. Si ejecutamos COU_L02 de country, al usar $DB->outQuery() tendremos:

    SELECT * FROM ccountry WHERE cCou_Name like “%niq%”;
  • $DB->outResultSet()
    Función para ayuda de debug. Imprime todo el resultset en pantalla. Útil sobre todo en el uso de parámetros. Por ejemplo, si ejecutamos CUS_L01 de customer, su outResultSet será:

    Array
    (
        [mCus_ID] => 1
        [mCus_Name] => Daniel Niquet
        [cCou_ID] => 1
    )
    
    
    Array
    (
        [mCus_ID] => 2
        [mCus_Name] => Andrés Gutierrez
        [cCou_ID] => 2
    )
    
    Array
    (
        [mCus_ID] => 3
        [mCus_Name] => Joan Castro
        [cCou_ID] => 1
    )
    
    Array
    (
        [mCus_ID] => 4
        [mCus_Name] => Leonardo Valenzuela
        [cCou_ID] => 1
    )
    
    
    Array
    (
        [mCus_ID] => 5
        [mCus_Name] => Luis Antonio Germon
        [cCou_ID] => 3
    )
    
    Array
    (
        [mCus_ID] => 6
        [mCus_Name] => Lorenzo Prieto
        [cCou_ID] => 3
    )
    
    Array
    (
        [mCus_ID] => 7
        [mCus_Name] => Andrea Lozano
        [cCou_ID] => 4
    )
    
    
    Array
    (
        [mCus_ID] => 8
        [mCus_Name] => Ana Torres
        [cCou_ID] => 4
    )
    
    Array
    (
        [mCus_ID] => 9
        [mCus_Name] => Juan Lopez
        [cCou_ID] => 3
    )
    
    Array
    (
        [mCus_ID] => 10
        [mCus_Name] => Lorena Gasca
        [cCou_ID] => 3
    )
    
    

Descarga

softrDB, ejemplos y script de BD de ejemplo

Ejemplos (para verse en el código php)

Cliente País Daniel Niquet Mexico Joan Castro Mexico
Leonardo Valenzuela Mexico
Andrés Gutierrez España
Luis Antonio Germon USA
Lorenzo Prieto USA
Juan Lopez USA
Lorena Gasca USA
Andrea Lozano Argentina
Ana Torres Argentina
Cliente Daniel Niquet Andrés Gutierrez
Joan Castro
Leonardo Valenzuela
Luis Antonio Germon
Cliente País Daniel Niquet Mexico Joan Castro Mexico
Leonardo Valenzuela Mexico
id País 4 Argentina 5 Canada