The SQL query is the same in both cases, and as can be seen, the query is expected to return two columns (user and perm), but selectrow_array() returns undef for the second column (perm in this case).
my ($x, $y) = $dbh->selectrow_array(qq{SELECT user,perm FROM access WHERE token=\'Tt9VpStL4xADSDJQtd4AkM c6cVi66Mwmr9pMcCRgO4NVJ\'})|| die "Could not query database: $DBI::errstr\n"; In the above, $y is undef (or blank) although MySQL has values for both (user and perm) columns. On 21 December 2013 08:23, Martin J. Evans <boh...@ntlworld.com> wrote: > On 20/12/2013 14:13, mimic...@gmail.com wrote: > >> Hi >> >> I need to understand why selectrow_array() return only one column (first >> column) when called in list context as in the code below. On the >> otherhand selectrow_arrayref behaves correctly. >> >> code >> ===== >> > > You've missed out how you actually called selectrow_array and that is the > important bit. > > I suspect you are not calling it in list context. > > > if ($x){ >> print "When using selectrow_array(), DBI returned:"; >> print "\$x: $x \$y: $y"; >> >> print "\n\n"; >> }else{ >> print "DB returned no data\n\n"; >> >> } >> >> selectrow_arrayref behaves correctly. >> >> my ($arrref) = $dbh->selectrow_arrayref(qq{ >> > > You don't need brackets around $arrref here BTW. selectrow_arrayref only > returns one value. > > SELECT user,perm FROM access >> WHERE token=\'Tt9VpStL4xADSDJQtd4AkMc6cVi66Mwmr9pMcCRgO4NVJ\'})|| die >> "Could not query database: $DBI::errstr\n"; >> >> my @retarr = @$arrref; >> >> if (@retarr){ >> print "When using selectrow_arrayref, DBI returned:"; >> print "\@retarr contains: @retarr "; >> >> print "\n\n"; >> }else{ >> print "DB returned no data\n\n"; >> >> } >> >> >> Output >> ========= >> perl misc_test.pl <http://misc_test.pl> >> >> Use of uninitialized value $y in concatenation (.) or string at >> misc_test.pl <http://misc_test.pl> line 69. >> >> When using selectrow_array(), DBI returned:$x: markb $y: >> >> When using selectrow_arrayref, DBI returned:@retarr contains: markb ro >> >> >> Installed versions >> ============ >> perl -MDBD::mysql -le 'print $DBD::mysql::VERSION;' >> 4.013 >> perl -MDBI -le 'print $DBI::VERSION;' >> 1.609 >> > > Martin > -- > Martin J. Evans > Wetherby, UK >