Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

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 }

-Paul


Comment on Re: $DBI::errstr is always undef
Select or Download Code
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 +:Oracle:host=fred.example.com;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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://602969]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (13)
As of 2015-07-06 14:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (75 votes), past polls