Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Pathologically Eclectic Rubbish Lister
 
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 exploiting the Monastery: (6)
As of 2014-04-20 01:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (485 votes), past polls