在Perl脚本中建立DB连接时出错?

在Perl脚本中建立DB连接时出错?,perl,dbi,sqlanywhere,dbd,Perl,Dbi,Sqlanywhere,Dbd,我正在使用perl 5.24。我正在努力学习Perl 我编写了一个简单的Perl代码来连接数据库。但给出了错误的陈述 DBI connect('database=vms','DBA',…)在simpleperl.pl第13行失败:(无错误字符串)。 代码是 #!/usr/bin/perl use DBI; use DBD::SQLAnywhere; my $driver = "SQLAnywhere"; my $database = "vms"; my $dsn = "DBI:$drive

我正在使用perl 5.24。我正在努力学习Perl

我编写了一个简单的Perl代码来连接数据库。但给出了错误的陈述

DBI connect('database=vms','DBA',…)在simpleperl.pl第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";
}
有人能指出这里可能存在的问题吗?

请注意文档中的以下内容:

$dbh=DBI->connect('DBI:SQLAnywhere:ENG=demo',$userid,$passwd)

还应注意以下事项:

  • 始终使用
    严格
    警告
  • 您不需要
    使用DBD::SQLAnywhere
    DBI
    将根据您在连接字符串中指定的内容选择驱动程序
  • 您在连接选项中指定了
    {RaiseError=>1}
    。这意味着,不需要
    或die
    <如果
    connect
    失败,code>DBI
将发出嘎嘎声
  • 您可能希望
    AutoCommit=>0
    与该
    RaiseError=>1
    配合使用
  • 连接尝试后不需要使用
    if($dbh)
    。除非
    connect
    成功,否则您无法到达那里
  • 考虑到修复连接字符串并不能解决问题,而且我没有SQLAnywhere数据库的实例来测试问题,我建议您添加:

    DBI->trace( 5 );
    
    通话前连接
    并用跟踪信息更新您的问题。另请参见。

    注意文档中的以下内容:

    $dbh=DBI->connect('DBI:SQLAnywhere:ENG=demo',$userid,$passwd)

    还应注意以下事项:

    • 始终使用
      严格
      警告
    • 您不需要
      使用DBD::SQLAnywhere
      DBI
      将根据您在连接字符串中指定的内容选择驱动程序
    • 您在连接选项中指定了
      {RaiseError=>1}
      。这意味着,不需要
      或die
      <如果
      connect
      失败,code>DBI
    将发出嘎嘎声
  • 您可能希望
    AutoCommit=>0
    与该
    RaiseError=>1
    配合使用
  • 连接尝试后不需要使用
    if($dbh)
    。除非
    connect
    成功,否则您无法到达那里
  • 考虑到修复连接字符串并不能解决问题,而且我没有SQLAnywhere数据库的实例来测试问题,我建议您添加:

    DBI->trace( 5 );
    

    通话前连接
    并用跟踪信息更新您的问题。另请参见。

    首次使用
    严格使用
    使用警告因为这些将捕获大量错误。不要直接使用DBD::
    DBI
    将为您处理驱动程序。我认为
    database=$database
    必须是
    ENG=$database
    。请参阅源代码中的te注释:
    #如果dbname的开头看起来不像#连接字符串参数('label=value;'format),则#'ENG='是前缀相关:首先使用
    严格使用
    使用警告因为这些将捕获大量错误。不要直接使用DBD::
    DBI
    将为您处理驱动程序。我认为
    database=$database
    必须是
    ENG=$database
    。请参阅源代码中的te注释:
    #如果dbname的开头看起来不像#连接字符串参数('label=value;'format),则#'ENG='是前缀相关:我运行了您建议的代码。它仍然在另一个simpleperl.pl行12处给出相同的错误DBI connect('ENG=vms','DBA',…)failed:(无错误字符串)。我假设确实存在一个名为
    vms
    的数据库,您可以通过其他方式连接到该数据库。这个假设正确吗?是的,有一个叫做vms的数据库。我运行了你建议的代码。它仍然在另一个simpleperl.pl行12处给出相同的错误DBI connect('ENG=vms','DBA',…)failed:(无错误字符串)。我假设确实存在一个名为
    vms
    的数据库,您可以通过其他方式连接到该数据库。这个假设正确吗?是的,有一个叫做vms的数据库。