When calling $sth->fetchrow_array in a scalar context, you're going to get back an array ref, possibly containing some other array refs (your result rows). So your test, if ($name eq "") {, should probably look more like, if ($name->[0][0] eq "") {, except that this completely disregards the case where no rows are returned.
You might also factor out all of the common code and elminate unnecessary complexity:
my $name = undef; # store subparent for each parent my %parent_hash = ( 'Father' => 'Mother', 'Mother' => 'Father' ); if (exists $parent_hash{$parent}) { my $sub_parent = $parent_hash{$parent}; for my $col ( $parent, $sub_parent ) { my $sql = "select $col from Roster where User=?"; my $rv = $dbh->selectcol_arrayref( $sql, undef, $user ); if ( @$rv ) { # any rows returned? $name = $rv->[0]; # take first one last; } } } # here, $name will be defined if one of above succeeded # etc. ...
Also, why are you using prepared statements (e.g., prepare() and execute()) without placeholders ('?'). You can just call selectrow_arrayref($sql) (or in your case, selectcol_arrayref($sql) since the results will be a single column) to the same effect.
Update: added placeholders, as per cfreak. What was I thinking?
dmm
If you GIVE a man a fish you feed him for a dayIn reply to Re(2): (Ovid): uninitialized value in concatenation
by dmmiller2k
in thread uninitialized value in concatenation
by mnlight
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |