Hi,
Just noticed this problem when my database was down:
#!/usr/bin/perl -w
use DBI;
my $dbh = DBI->connect("dbi:ODBC:testviagamb",
"Fred",
"Bloggs");
Use of uninitialized value in concatenation (.) or string at
/usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 584.
DBI connect('testviagamb','Fred',...) failed: at ./con.pl line 6
It should have displayed:
[unixODBC][Easysoft ODBC (Client)]Client unable to establish connection
(SQL-08001)
[unixODBC][Easysoft ODBC (Client)]Connection refused, connect(), after 5
attempts
Same happens if I use dbi:ODBC:doesnotexist and I don't have a DSN called
doesnotexist. This used to work but I can't seem to locate what has changed
recently to break this. I am using DBI 1.37 and DBD::ODBC 1.05.
A trace for the case where the DSN does not exist follows (you can see the
correct error message in the trace but it is not displayed and you get that
uninitialised value in concatenation):
DBI 1.37-nothread dispatch trace level set to 9
-> DBI->connect(dbi:ODBC:doesnotexist, Fred, ****)
-> DBI->install_driver(ODBC) for linux perl=5.006001 pid=32637 ruid=501
euid=501
install_driver: DBD::ODBC version 1.05 loaded from
/usr/lib/perl5/site_perl/5.6.1/i686-linux/DBD/ODBC.pm
New DBI::dr (for DBD::ODBC::dr, parent=, id=)
dbih_setup_handle(DBI::dr=HASH(0x81bb28c)=>DBI::dr=HASH(0x80fd0a8),
DBD::ODBC::dr, 0, Null!)
dbih_make_com(Null!, (nil), DBD::ODBC::dr, 92, (nil)) thr#(nil)
dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), Err, Null!) SCALAR(0x818cd68)
(already defined)
dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), State, Null!) SCALAR(0x818cd20)
(already defined)
dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), Errstr, Null!) SCALAR(0x818cd50)
(already defined)
dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), TraceLevel, Null!) 0 (already
defined)
dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), FetchHashKeyName, Null!) 'NAME'
(already defined)
<- install_driver= DBI::dr=HASH(0x81bb28c)
>> connect DISPATCH (DBI::dr=HASH(0x81bb28c) rc2/3 @5 g0 ima1
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 582
-> connect for DBD::ODBC::dr (DBI::dr=HASH(0x81bb28c)~0x80fd0a8
'doesnotexist' 'Fred' **** HASH(0x81858d8))
New DBI::db (for DBD::ODBC::db, parent=DBI::dr=HASH(0x80fd0a8), id=)
dbih_setup_handle(DBI::db=HASH(0x80fd06c)=>DBI::db=HASH(0x818592c),
DBD::ODBC::db, 81b8b3c, Null!)
dbih_make_com(DBI::dr=HASH(0x80fd0a8), 0x81c6098, DBD::ODBC::db, 220,
(nil)) thr#(nil)
dbih_setup_attrib(DBI::db=HASH(0x818592c), Err, DBI::dr=HASH(0x80fd0a8))
SCALAR(0x81bde94) (already defined)
dbih_setup_attrib(DBI::db=HASH(0x818592c), State, DBI::dr=HASH(0x80fd0a8))
SCALAR(0x81c02f8) (already defined)
dbih_setup_attrib(DBI::db=HASH(0x818592c), Errstr, DBI::dr=HASH(0x80fd0a8))
SCALAR(0x81bdec4) (already defined)
dbih_setup_attrib(DBI::db=HASH(0x818592c), TraceLevel,
DBI::dr=HASH(0x80fd0a8)) 0 (already defined)
dbih_setup_attrib(DBI::db=HASH(0x818592c), FetchHashKeyName,
DBI::dr=HASH(0x80fd0a8)) 'NAME' (already defined)
dbih_setup_attrib(DBI::db=HASH(0x818592c), HandleError,
DBI::dr=HASH(0x80fd0a8)) undef (not defined)
<- connect= undef at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line
582
>> errstr DISPATCH (DBI::dr=HASH(0x81bb28c) rc2/3 @1 g0 ima4
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 584
-> errstr in DBD::_::common for DBD::ODBC::dr
(DBI::dr=HASH(0x81bb28c)~0x80fd0a8)
<- errstr= undef at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line
584
DBI connect('doesnotexist','Fred',...) failed:
>> DESTROY DISPATCH (DBI::db=HASH(0x80fd06c) rc1/1 @1 g0 ima4
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 639 via
./con.pl line 4
<> DESTROY ignored for outer handle DBI::db=HASH(0x80fd06c) (inner
DBI::db=HASH(0x818592c))
>> DESTROY DISPATCH (DBI::db=HASH(0x818592c) rc1/1 @1 g0 ima4
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 639 via
./con.pl line 4
-> DESTROY for DBD::ODBC::db (DBI::db=HASH(0x818592c)~INNER)
DESTROY for DBI::db=HASH(0x818592c) ignored - handle not initialised
error: -1 '[unixODBC][Driver Manager]Data source name not found, and no
default driver specified (SQL-IM002)(DBD: db_login/SQLConnect err=-1)'
<- DESTROY= undef at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line
639 via ./con.pl line 4
DESTROY (dbih_clearcom) (dbh 0x80fd06c 0x81187b0, com 0x81f7630, imp
DBD::ODBC::db):
FLAGS 0x11: COMSET Warn
PARENT DBI::dr=HASH(0x80fd0a8)
KIDS 0 (0 Active)
IMP_DATA undef
dbih_clearcom 0x80fd06c (com 0x81f7630, type 2) done.
-- DBI::END
>> disconnect_all DISPATCH (DBI::dr=HASH(0x81bb28c) rc1/3 @1 g0 ima801
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 649 via
./con.pl line 0
-> disconnect_all for DBD::ODBC::dr (DBI::dr=HASH(0x81bb28c)~0x80fd0a8)
<- disconnect_all= '' at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm
line 649 via ./con.pl line 0
! >> DESTROY DISPATCH (DBI::dr=HASH(0x80fd0a8) rc1/1 @1 g0 ima4
pid#32637) during global destruction
! -> DESTROY for DBD::ODBC::dr (DBI::dr=HASH(0x80fd0a8)~INNER)
! <- DESTROY= (not implemented) during global destruction
DESTROY (dbih_clearcom) (drh 0x81bb28c 0x813c430, com 0x81c6098, imp
DBD::ODBC::dr):
FLAGS 0x215: COMSET Active Warn AutoCommit
PARENT undef
KIDS 0 (0 Active)
IMP_DATA undef
dbih_clearcom 0x81bb28c (com 0x81c6098, type 1) done.
! >> DESTROY DISPATCH (DBI::dr=HASH(0x81bb28c) rc1/1 @1 g0 ima4
pid#32637) during global destruction
! <> DESTROY for DBI::dr=HASH(0x81bb28c) ignored (inner handle gone)
perl -V
Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:
Platform:
osname=linux, osvers=2.2.14-6.1.1smp, archname=i686-linux
uname='linux devmaster 2.2.14-6.1.1smp #1 smp thu apr 13 19:55:55 edt 2000 i
686 unknown '
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=unde
f
useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
Compiler:
cc='cc', ccflags ='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SO
URCE -D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-fno-strict-aliasing -I/usr/local/include'
ccversion='', gccversion='egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize
=8
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lndbm -lgdbm -ldb -ldl -lm -lc -lposix -lcrypt -lutil
perllibs=-lnsl -ldl -lm -lc -lposix -lcrypt -lutil
libc=/lib/libc-2.1.3.so, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: USE_LARGE_FILES
Built under linux
Compiled at Jun 5 2001 10:27:46
@INC:
/usr/lib/perl5/5.6.1/i686-linux
/usr/lib/perl5/5.6.1
/usr/lib/perl5/site_perl/5.6.1/i686-linux
/usr/lib/perl5/site_perl/5.6.1
/usr/lib/perl5/site_perl/5.005
/usr/lib/perl5/site_perl
.
Thanks,
Martin
--
Martin J. Evans
Easysoft Ltd, UK
Development