Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: $DBI::errstr is always undef

by jettero (Monsignor)
on Mar 02, 2007 at 22:01 UTC ( #602969=note: print w/replies, xml ) Need Help??

in reply to $DBI::errstr is always undef

I suspect you want  die "couldn't connect!!!: " . DBI->errstr not $DBI::errstr. That is, it's a function, not a string. use strict doesn't catch those when you change namespace like that. Although, the documentation for DBI clearly shows $DBI::errstr, so who knows. Personally, I use the function and don't get any warnings.

UPDATE: ikegami, yes, I said that the example shows $DBI::errstr. No need to point it out again. What I was saying is that using the function also works and avoids the warning. In fact the function really just returns the scalar, so it's a silly thing to argue about anyway.

And if you're curious, they haven't updated the docs yet, but there's been a todo item about it for like 8 years:

# Help people doing DBI->errstr, might even document it one day # XXX probably best moved to cheaper XS code sub err { $DBI::err } sub errstr { $DBI::errstr }


Replies are listed 'Best First'.
Re^2: $DBI::errstr is always undef
by ikegami (Pope) on Mar 02, 2007 at 22:25 UTC

    According to the docs, $DBI::errstr is a "dynamic attribute", "always associated with the last handle used", and is "Equivalent to $h->errstr." The example in the documentation for connect even uses $DBI::errstr, not DBI->errstr.

Re^2: $DBI::errstr is always undef
by Anonymous Monk on Oct 04, 2011 at 03:05 UTC
    Jettero, that's it! The documentation is wrong. I have been going crazy tonight trying to track this down. A bit of googling will reveal that hundreds of people have suffered the same problem. This needs to be a priority to fix it. By the way, I'm using DBD::mysql and it's just the same.

      I don't think the documentation is wrong at all. There may be something wrong with DBD::mysql in your case and perhaps with DBD::Oracle in the past but for DBD::ODBC and DBD::Oracle now

      perl -le 'use strict; use warnings;use DBI; my $h = DBI->connect("dbi: +ODBC:does_not_exist", undef, undef, {PrintError => 0, RaiseError => 0 +}) or die $DBI::errstr;' [unixODBC][Driver Manager]Data source name not found, and no default d +river specified (SQL-IM002) at -e line 1.
      perl -le 'use strict; use warnings; use DBI; my $h = DBI->connect("dbi;sid=fred", "xxx","yyy", {RaiseError => +0, PrintError => 0}) or die $DBI::errstr;' ORA-24327: need explicit attach before authenticating a user (DBD ERRO +R: OCISessionBegin) at -e line 1.
      they both seem to work fine for me. Interestingly, every time (except for the OP in this thread) I see this mentioned these days it is DBD::mysql. However, for me even DBD::mysql works fine:
      perl -le 'use strict; use warnings; use DBI; my $h = DBI->connect("dbi +:mysql:database=testd", "xxx","yyy", {RaiseError => 0, PrintError => +0}) or die $DBI::errstr;' Unknown database 'testd' at -e line 1.

      I'm using all the latest released DBDs and DBI.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://602969]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2018-03-24 20:35 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (299 votes). Check out past polls.