Página 1 de 1

Consulta SELECT, con campos VARIABLES

NotaPublicado: 2011-11-22 06:01 @292
por Lor
Quisiera generar una aplicación en donde el usuario pueda diseñar, él mismo, consultas a una base de datos acorde a los campos de datos que desea conocer.

Tendría un formulario con las siguientes cajas de texto:
• Select ($param_select): para indicar los nombres de las columnas de la tabla que desea
• Campo ‘FROM’ ($param_from), para indicar el nombre de la tabla y
• Campo ‘WHERE’ ($param_where) para ingresar condiciones si tuviese.

Mi pregunta es, al ejecutar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $query = " SELECT " . $param_select
  2.           . " FROM "   . $param_from
  3.           . " WHERE "  . $param_where
  4.           ;
  5.  
  6. my $sth = $dbh->prepare($query) or die("Error prepare: $query");
  7. $sth->execute() or die("Error prepare: $query");
  8.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Suponiendo que obtenga varias filas y columnas resultado, ¿cómo hago para acceder a cada uno de los datos columnas y filas del resultado, si no conozco el nombre de las mismas?

¡¡ Muchas gracias !!

Re: Consulta SELECT, con campos VARIABLES

NotaPublicado: 2011-11-22 08:03 @377
por explorer
En la documentación de DBI se indican algunos procedimientos para sacar información del esquema de la base de datos.

Uno de ellos es, después de hacer la consulta, mirar el contenido del atributo NAME, que contiene una referencia a un array, en que cada elemento es el nombre de la columna.

Por ejemplo, para acceder al primer nombre de columna se puede usar esto:

say "Nombre primera columna: $sth->{NAME}->[0]";

Más información en la sección Statement Handle Attributes de DBI. Ver también primer ejemplo de la sección Simple Examples.

También, usando $sth->fetchall_arrayref({}) o fetchall_hashref() se obtiene la referencia a un hash cuyas claves son los nombres de las columnas, pero con el problema conocido de que esas claves (columnas) no salen en el mismo orden en que se describe en la definición de la tabla (por ser un hash Perl, desde luego), con lo que en algunas situaciones no es deseable (algunas aplicaciones requieren conocer el orden de las columnas).