[Perl] ayuda con DBI y fetchrow

Gunnar Wolf gwolf en gwolf.org
Mie Oct 25 19:22:12 CDT 2006


Joel Muñoz dijo [Wed, Oct 25, 2006 at 09:58:48PM +0000]:
> Hola a tod en s
> Tengo Perl y MySql y estoy usando DBI para bajar todos los campos de unas 
> tablas, (todos los campos son alfanumericos) y necesito que todos los 
> campos esten con comillas dobles.
> 
> Lo que quiero hacer es eficientar mi codigo porque se como se puede lograr 
> con la instruccion  bind_column pero son 15 tablas y cada tabla tiene 
> alrededor de 35 campos, asi que echen cuentas ... Si alguien sabe como 
> hacerlo con fetch_row, se lo agradeceria mucho
> He intentado hacer un replace de las comas por "," pero falla en el ultimo 
> campo, por obvias razones.
> 
> este es mi codigo
> 
> 
> my $dbh   = DBI->connect ("DBI:mysql:database=$db:host=$host",
>                           $user,
>                           $password)
>                           or die "Can't connect to database: 
> $DBI::errstr\n";
> 
> my $sth = $dbh->prepare( " SELECT * FROM ciudades");
> $sth->execute( );
> print "\tQuery results:\n====================================\n";
> #este es el problema :-S, aqui pone todos los campos divididos por coma, 
> pero necesito que a cada
> #campo se le ponga comilla doble
> while ( my @row = $sth->fetchrow_array( ) )  {
>         print "@row\n";
> }

O no entendí tu planteamiento, o es trivial:

while (my @row = $sth->fetchrow_array ) {
    print join(', ', map {qq("$_")} @row),"\n";
}

¿Qué significa eso? Bueno, join es simple - Toma los elementos de un
arreglo, y los une con la cadena que le indiques. Respecto a map,
recibe un bloque (básicamente una función sin nombre), y le pasa en la
variable default ($_) cada uno de los elementos de tu arreglo. Map te
devuelve el aplicar esta función a cada uno de los elementos.

Por último, ¿qué es qq()? Es una función análoga a las comillas
dobles, para simplificarme la existencia, dado que requieres que la
salida lleve comillas dobles ;-)

Saludos,

-- 
Gunnar Wolf - gwolf en gwolf.org - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF


Más información sobre la lista de distribución Perl