我使用的是perl 5.24。我正在努力学习Perl。
我编写了一个简单的Perl代码来连接数据库。但是给出了错误陈述
DBI connect('database=vms','DBA',...) failed: (no error string) at simpleperl.pl line 13.
代码是
#!/usr/bin/perl
use DBI;
use DBD::SQLAnywhere;
my $driver = "SQLAnywhere";
my $database = "vms";
my $dsn = "DBI:$driver:database=$database";
my $userid = "DBA";
my $password = "admin";
my $dbh = DBI->connect($dsn, $userid, $password,{RaiseError => 1}) or die ("died connection:$DBI::errstr");
if($dbh)
{
print "Connection Established";
}
有人能指出这里可能出现的问题吗?
答案 0 :(得分:2)
请注意DBD::SQLAnywhere文档中的以下内容:
$dbh = DBI->connect( 'dbi:SQLAnywhere:ENG=demo', $userid, $passwd );
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $driver = "SQLAnywhere";
my $database = "vms";
my $dsn = "DBI:$driver:ENG=$database";
my $userid = "DBA";
my $password = "admin";
my $dbh = DBI->connect($dsn, $userid, $password, {RaiseError => 1});
print "Connection established\n";
$dbh->disconnect;
另请注意以下内容:
strict
和warnings
。use DBD::SQLAnywhere;
。 DBI
将根据您在连接字符串中指定的内容选择驱动程序。{RaiseError => 1}
。这意味着,不需要or die
。如果DBI
失败,connect
会嘶哑。AutoCommit => 0
与RaiseError => 1
一起使用。if ($dbh)
。除非connect
成功,否则你不会到达那里。鉴于修复连接字符串没有解决问题,我没有SQLAnywhere数据库的实例来测试,我建议你添加:
DBI->trace( 5 );
在connect
调用之前,并使用跟踪信息更新您的问题。另请参阅TRACING。