我有一个带有 x86 CPU 的 Solaris 系统,当我尝试使用 perl 连接到 sybase db 时,出现以下错误(当我在调试模式下运行脚本并进入函数 DBD::Sybase::db 时产生了错误: :_login 在 Sybase.pm 第 94 行)
ct_con_props(CS_PASSWORD) 在 /usr/local/lib/perl5/site_perl/5.8.8/i86pc-solaris/DBD/Sybase.pm 第 94 行失败。在 /usr/local/lib/perl5/site_perl/5.8.8/i86pc -solaris/DBD/Sybase.pm 第 94 行 DBD::Sybase::dr::connect('DBI::dr=HASH(0x8613a5c)', 'server=server1', 'user1, 'password1', 'HASH(0x86b4e5c) )') 在 /usr/local/lib/perl5/site_perl/5.8.8/i86pc-solaris/DBI.pm 第 617 行 DBI::_ ANON _/usr/local/lib/perl5/site_perl/5.8.8/ 处调用i86pc-solaris/DBI.pm:679 在 /usr/local/lib/perl5/site_perl/5.8.8/i86pc-solaris/DBI.pm 第 681 行调用 DBI::connect('DBI', 'DBI:Sybase:server =server1', 'user1, 'password1') 在 ./test.pl 第 28 行调用 DBI::CODE(0x83fcdd4)(/usr/local/lib/perl5/site_perl/5.8.8/i86pc-solaris/DBI.pm :618): 618: $user = '' 如果 !defined $user;
从消息中,似乎密码有问题?但我确信密码是正确的,并且相同的代码在 Spark-solaris 系统上运行良好,谁能告诉我出了什么问题,或者告诉我如何进入函数 DBD::Sybase::db::_login( $this, $server, $user, $auth, $attr)? 看起来这个函数在一个 .xs 文件中,但我找不到它在哪里,也无法调试它。
如果我在没有调试的情况下运行脚本,我收到以下错误
ct_con_props(CS_PASSWORD) 在 /usr/local/lib/perl5/site_perl/5.8.8/i86pc-solaris/DBD/Sybase.pm 第 94 行失败。DBI connect('server=server1','user1',...)失败:OpenClient 消息:LAYER = (1) ORIGIN = (4) SEVERITY = (6) NUMBER = (221) 服务器 server1,数据库消息字符串:ct__string_extended_encryption:用户 api 层:内部公共库错误:错误字符串在 ./ 不可用test.pl 第 28 行 在 ./test.pl 第 28 行连接失败。
这是 Sybase.pm 中子连接的代码
sub connect {
my($drh, $dbase, $user, $auth, $attr) = @_;
my $ifile = '';
my $server = $dbase || $ENV{DSQUERY} || 'SYBASE';
my($this) = DBI::_new_dbh($drh, {
'Name' => $server,
'Username' => $user,
'CURRENT_USER' => $user,
});
DBD::Sybase::db::_login($this, $server, $user, $auth, $attr)
or return undef;
return $this;
}