Can you post an example script that calls selectrow_hashref and
demonstrates the problem?
Tim.
On Fri, Feb 14, 2003 at 01:18:56PM +1100, Craig Sanders wrote:
> this seems to have changed since i installed DBI 1.32 (i upgraded from 1.30),
> and is breaking some scripts which assume that it will always return a hash.
>
> sometimes (when the query returns no rows), it returns the scalar "1" -
> attempting to use that as a hashref causes the script to die (with "strict
> refs" set - would cause strange errors without it)
>
> the problem seems to be in _do_selectrow() in DBI.pm, which is also used
> by selectrow_arrayref.
>
> as a temporary workaround fix, i hacked _do_selectrow() so that it
> always returns the appropriate reference.
>
> like so:
>
> sub _do_selectrow {
> my ($method, $dbh, $stmt, $attr, @bind) = @_;
> my $sth = ((ref $stmt) ? $stmt : $dbh->prepare($stmt, $attr))
> or return;
> $sth->execute(@bind)
> or return;
> my $row = $sth->$method()
> and $sth->finish;
> # temporary workaround fix. CAS 2003-02-14
> if ($method =~ /ref/ && ! ref($row)) {
> warn "***** _do_selectrow workaround";
> $row = [] if ($method =~ /array/);
> $row = {} if ($method =~ /hash/);
> } ;
> return $row;
> }
>
>
> i don't know the DBI code well enough to know whether this will have
> other undesirable consequences, but it stops my scripts from dying until
> a real fix is available.
>
>
> craig
>
> --
> craig sanders <[EMAIL PROTECTED]>
>
> Fabricati Diem, PVNC.
> -- motto of the Ankh-Morpork City Watch