Optimizar Zend Framework – Variables bind en Zend Framework

Optimizar Zend Framework – Variables bind en Zend Framework

Ultimamente estoy escribiendo bastante y mas sobre Zend Framework, esto es debido porque en el trabajo estamos desarrollando mucho dependiendo de este framework, y no solo yo, somo varios, y muchos de ellos estan encontrando cosas realmente interesantes, que todavia no habia visto referencias en Espaniol, espero poder aportar todos esos descubrimientos.

Un descubrimiento importante que surgio en el trabajo despues de que uno de los chicos estaba debugueando una aplicacion, fue el uso de Binding variables en Oracle con Zend_Db_Select.

Una forma muy comun de creer que usamos binding variables es la siguiente.

  1.  
  2. $query = $this->select()->where->(‘ id = ?’, $id );
  3.  

El problema es que esto Zend_Db_Select lo procesa y hace el reemplazo de lo desconocido (?), por el parametro que continua, si es una variable reemplaza el ? por la variable que se pasa como segundo parametro, y si fuera un array , reemplaza por orden.

Si hacemos un echo del query resultante, esto nos va a dar los siguiente

  1.  
  2. SELECT * FROM tabla WHERE id = 1;
  3.  

Cuando lo que deberia devolver para que el motor de Oracle saque provecho de las binding variables seria, lo siguiente:

  1.  
  2. SELECT * FROM tabla WHERE id =:id;
  3.  

Si quisieramos aprovechar esto con ZF la solucion es simple.La consulta anterior podemos generarla de la siguiente forma.

  1.  
  2. <?php
  3. $query = $this->select()->where( ‘id = :id ‘ );
  4. $this->fetchAll( $query, array( ‘id’ => 1));
  5. ?>
  6.  

Hay una nota muy interesante sobre las binding variables de Oracle en el blog de Web And Beer. Las binding son una opcion mas que importante para aprovechar el motor de la base de datos, seria bueno usarla de la manera que corresponde.