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
>

Reply via email to