在Perl脚本中建立数据库连接时出错?

问题描述:

我使用的是perl 5.24。我正在学习Perl。在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

首先使用'strict strict;'和'use warnings'',因为那些会遇到一堆错误。并且不要直接使用DBD :: '。 'DBI'将为您处理驱动程序。 – dgw

+0

我想'database = $ database'必须是'ENG = $ database'。请参阅源代码中的评论:'#如果dbname以某种看起来不像 \t#a连接字符串参数('label = value;'格式)开头,则 \t#'ENG ='是前缀。 ' – Jens

+0

相关:https://*.com/q/44906829 – PerlDuck

注意在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; 

还要注意以下几点:

  • 始终使用strictwarnings
  • 您不需要use DBD::SQLAnywhere;DBI将根据您在连接字符串中指定的内容选择驱动程序。
  • 您在连接选项中指定了{RaiseError => 1}。这意味着,不需要or die。如果connect失败,DBI会发声。
  • 您可能想要AutoCommit => 0去那RaiseError => 1
  • 连接尝试后不需要if ($dbh)。除非connect成功,否则你不会到那里。

鉴于固定在连接字符串没有解决的问题,我没有SQLAnywhere的数据库来测试的东西的情况下,我会建议你补充:

DBI->trace(5); 

connect前调用并使用跟踪信息更新您的问题。另见TRACING

+0

我跑了你建议的代码。它仍然给出了相同的错误 **在另一个SimplePerl.pl行12 DBI连接('ENG = vms','DBA',...)失败:(无错误字符串)** – Prateek

+0

我假设确实有名为'vms'的数据库,您可以通过其他方式进行连接。这个假设是否正确? –

+0

是的,有一个名为vms的数据库。 – Prateek