Sitios MultiIdioma – ezSQL Database Class

ezSQL Database Class como su nombre lo dice es una clase escrita en PHP que nos facilita el acceso a base de datos, podemos usarlo con MySQL, Oracle8, InterBase/FireBird, PostgreSQL, SQLite o MS-SQL pero para nuestro caso en particular lo usaremos para MySQL.

En esta oportunidad les mostraré algunos ejemplos de su uso y en adelante veremos su aplicación con el pequeño sistema que queremos desarrollar.

Creo que la mayoría de nosotros hemos empezado nuestros primeros scripts en PHP siguiendo el consejo de diferentes tutoriales, foros, consejos de amigos o el mismo manual de PHP y todos hemos escrito esto:

PHP:
// Conexion, seleccion de base de datos
$enlace = mysql_connect('servidor', 'usuario', 'password') or die('No pudo conectarse : ' . mysql_error());
echo 'Conexión exitosa'; mysql_select_db('mibase') or die('No pudo seleccionarse la BD.');
// Realizar una consulta SQL
$consulta = 'SELECT * FROM mi_tabla';
$resultado = mysql_query($consulta) or die('La consulta falló: ' . mysql_error());
// Impresion de resultados en HTML
echo " <table>\n";
while ($linea = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
    echo "\t <tbody> <tr>\n";
    foreach ($linea as $valor_col) {
        echo "\t\t <td>$valor_col</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</tbody></table>\n";
// Liberar conjunto de resultados
mysql_free_result($resultado);
// Cerrar la conexion
mysql_close($enlace);

Con ezSQL podemos simplificar muchas de estas tareas que las repetíamos cada vez que teníamos que seleccionar un registro o registros, insertar, actualizar o borrar como veremos a continuación.

Para el ejemplo usaré una tabla simple con la siguiente estructura que llamaremos "mi_tabla":

  • idpersona
  • nombre
  • email

Incluimos los archivos necesarios y creamos una instancia de la clase:

PHP:

include_once "../shared/ez_sql_core.php";
include_once "ez_sql_mysql.php";
$bcdb = new ezSQL_mysql('usuario','password','mibase','servidor');
 
Ahora lo interesante:
PHP:

// Para insertar un nuevo registro
$bcdb->query("INSERT INTO mi_tabla VALUES (NULL, 'braulio', 'mail@buayacorp.com')");

// Si queremos recuperar el id de este último pues
$ultimoid = $bcdb->insert_id;

// Para seleccionar todos los registros de la tabla
// El segundo parámetro indica si nuestros resultados serán arreglos asociativos (ARRAY_A) o arreglos numéricos (ARRAY_N)
$resultados = $bcdb->get_results("SELECT * FROM mi_tabla", ARRAY_A);

// y mostrarlos
foreach($resultados as $k => $v) {
  echo "Nombre: " . $v["nombre"];
  echo "Email: " . $v["email"];
}

// Para seleccionar una fila y mostrarla
$resultado = $bcdb->get_row("SELECT * FROM mi_tabla WHERE idpersona = '$ultimoid'", ARRAY_A);
echo "Nombre: " . $resultado["nombre"];
echo "Nombre: " . $resultado["email"];

// Para seleccionar sólo una variable y mostrarla
$nombre = $bcdb->get_var("SELECT nombre FROM mi_tabla WHERE idpersona = '$ultimoid'");
echo $nombre;

// Para actualizar y borrar
$bcdb->query("UPDATE mi_tabla SET nombre = 'Andres' WHERE id = $ultimoid");
$bcdb->query("DELETE FROM mi_tabla WHERE id = $ultimoid");
 

Resumiendo los métodos que nos ofrece la clase tenemos:

  • El método query: Sirve para hacer consultas del modo "ExecuteNonQuery" osea que no devuelven resultados, esto nos sirve para INSERT, UPDATE y DELETE.
  • El método get_results: Sirve para las consultas que devuelven todos los datos de un tabla, y nos devuelve una matriz de resultados
  • El método get_row: Nos devuelve sólo una fila de una consulta.
  • El método get_var: Nos devuelve sólamente una variable.

Esta librería tiene muchas mas cosas que nos ayudarán a manejar nuestra base de datos, pero no hablaremos de todo en esta entrada, si desean revisarlo más a fondo pueden leer la documentación.

Enlaces

12 Replies to “Sitios MultiIdioma – ezSQL Database Class”

  1. Hola,

    Interesante comentario sobre esta clase para encapsular el uso de una base de datos a través de PHP, no la conocía y parece útil.

    Personalmente utilizo ADOBD con PHP que me parece bastante potente sobre todo en la gestión de consultas de tipo insert/update.

    Pero bueno, sobre gustos...
    Y felicidades por el blog, en la parte de PHP, ya tiene un asiduo lector más.

    Saludos,

  2. Hola, Esteban:

    Gracias por los comentarios, y sobre ADODB pues yo también alguna vez lo usé y pues no me convenció mucho por el peso total de los archivos (creo que eran como 2 mb) comparado con este que no llega ni a los 10 kb. Te invito a que lo pruebes y compares experiencias, especiálmente para aplicaciones simples.

  3. Me acaban de ahorrar mucha, que digo mucha, muchisisisisisisisisima talacha, excelente articulo. Si tu objetivo es enseñar y ayudar a los demas, conmigo lo conseguiste perfectamente....

    gracias... desde mexico

  4. Gracias por los comentarios Jorge, por cierto, no estaría de más que le hagas click en los anuncios de google 😀 me dá gusto de que la página te sirva de algo.

  5. Hola!
    Creo que hay un error en esta línea:

    // Para insertar un nuevo registro
    $bcdb->query("INSERT INTO mi_tabla VALUES ('braulio', 'mail@buayacorp.com')");

    No se define un valor para la columna idpersona, en un caso similar, a mi me devuelve error. Lo solucioné con:

    // Para insertar un nuevo registro
    $bcdb->query("INSERT INTO mi_tabla VALUES (NULL, 'braulio', 'mail@buayacorp.com')");

    Simplemente añadiendo el NULL.

    Un saludo y gracias por el tutorial, me ha ayudado.

  6. php:

    function print_user_data($user)
    {
        echo $user->username."\n";
    }

    $bcdb = new ezSQL_mysql('dbuser','dbpass','dbname','dbhost');
    $bcdb->query('SELECT username FROM user WHERE 1', 'print_user_data');

     

    ez_sql_mysql.php

    code:

    -           function query($query)
    +           function query($query, $callback=null)
     
    code:

                    // Store Query Results
                    $num_rows=0;
                    while ( $row = @mysql_fetch_object($this->result) )
                    {
    +                    if(!empty($callback) && is_callable($callback))
    +                        @ call_user_func_array($callback, array($row));
                        // Store relults as an objects within main array
                        $this->last_result[$num_rows] = $row;
                        $num_rows++;
                    }
     

    enjoy!

  7. El unico defecto que le veo a la clase por ahora es que no permite cerrar la conexion, algo importante en algunos servidores que por distintos motivos no la cierran al finalizar el script o por ejemplo cuando necesitas cerrar una para abrir otra en otro servidor.
    Yo intente implementarle esta funcion pero nunca lo consegui, el $link de mysql_close() nunca me daba valido...

    Saludos.

  8. hola buenoas dias, una pregunta tendran por casualidad la clase para postgres me he bajado 3 tipos de conexion y no me han funcionado. gracias. espero pronto su respuesta

  9. Señores:

    Revisando la web para aprender esta forma de conexion a las bd (cualquiera sea esta) me han salido canas verdes (xD) resulta que se supone en el servidor esta instalado ezsql y que simplemente debe ser llamado en cada script con la sgte instruccion:

    [lphp]include ("ez_sql.php");[/php]

    luego se debe generar una nueva instancia con la siguiente instruccion:

    php:

    $bd= new ezSQL_mysql('usuario','clave','bd','host')

    pues bien, suponiendo que en el espacio asignado en el servidor para ensayar este tipo de conexion esta instalado ezsql.php en forma correcta, al ejecutar el script en la web desdeel server, me sale el sgte error:

    code:

    Warning: include_once(ez_sql.php) [function.include-once]: failed to open stream: No such file or directory in /home/proyectos/capacitacion/www/formulario.php on line 2

    Warning: include_once() [function.include]: Failed opening 'ez_sql.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/proyectos/capacitacion/www/formulario.php on line 2

    Fatal error: Class 'ezSQL_mysql' not found in /home/proyectos/capacitacion/www/formulario.php on line 6

    todas esa advertencias y error, indican que... el ezsql no esta instalado en la unidad asignada en el server para realizar las practicas? esta instalado? que hay de malo en el script si les he posteado las lineas que supuestamente generan los errores y warnings?

    alguien pudiera darme luces de como poder solucionar este detalle?

    dejo mi mail para cualquier ayudita 🙁 fahren at live dot com ): saludos y gracias

  10. El error es claro, no estás incluyendo el archivo de la clase. Verifica si es que la ruta a la que haces referencia es correcta.

    Revisa bien si tienes estas líneas o algo parecido al menos:

    php:

    include_once "../shared/ez_sql_core.php";

    include_once "ez_sql_mysql.php";

Comments are closed.