http://www.perlmonks.org?node_id=430291

hok_si_la has asked for the wisdom of the Perl Monks concerning the following question:

In the following code, the statement, "print FH $data{name};" does not print anything. I do have a column in my table named 'name'. This has to be a simple error. I should add that I have printed out the generated SQL statement and it works fine. I should be able to assume that my session was successful with RaiseError set to one correct?

############################################################ sub getInfo ############################################################ { my $dbtable = shift; my $function = shift; my $where = shift; my ($dbh, $sth, @datetime, @date, $name, %data); my $i=0; $dbh=DBI->connect('DBI:ODBC:Servers', { RaiseError => 1, AutoCommit => + 0 }); my $sth = $dbh->prepare( "$function FROM $dbtable $where" ); $sth->execute; $sth->bind_columns( \( @data{ @{$sth->{NAME_lc} } } )); $sth->{'ChopBlanks'} =1; @datetime = split(' ', $data{submit_date}); @date = split(/-/,$datetime[0]); my $userid = $data{name}; my $username = findADname($userid); open(FH, "> SQLoutput.txt")or die("Couldn't open SQLoutput.dat\n"); print FH $data{name}; print FH "Hello"; close FH; $sth->finish(); $dbh->disconnect(); #----Needed to free up system resources. }

Thanks for your help,
the hoksila

Replies are listed 'Best First'.
Re: Referencing bound variables
by olivierp (Hermit) on Feb 11, 2005 at 21:59 UTC
    I think you need to $sth->fetch at least once to get your %data filled with values.
    HTH
    --
    Olivier
      Indeed! Fetch will get a record and place the values in the bound variables.
Re: Referencing bound variables
by Roy Johnson (Monsignor) on Feb 11, 2005 at 21:47 UTC
    Just before the print statement in question, add
    use Data::Dumper; print STDERR Dumper(\%data);
    to see what you have in there. Or just print out keys %data. It's probably 'NAME'.

    Caution: Contents may have been coded under pressure.
      Okay I have an idea what is happening now. It is apparently a session issue. The SQL statement executes alone, and when I dump %data I get this:
      $VAR1 = { 'denied' => undef, 'disk_space' => undef, 'backupdb' => unde +f & on & on.

      Thanks again Roy for your help,
      Hok_si_la
Re: Referencing bound variables
by holli (Abbot) on Feb 11, 2005 at 21:54 UTC
    well you declared %data in my ($dbh, $sth, @datetime, @date, $name, %data); but you never assign values to it, thus it is empty.

    holli, /regexed monk/
      Doesn't $sth->bind_columns( \( @data{ @{$sth->{NAME_lc} } } )); assign values to %data?