使用DBI会导致模块文件编译错误 perl版本是5.8.8 mysql版本是5.5.42 DBI版本为1.633,DBD::mysql版本为4.022

使用DBI会导致模块文件编译错误 perl版本是5.8.8 mysql版本是5.5.42 DBI版本为1.633,DBD::mysql版本为4.022,perl,perl-module,dbi,Perl,Perl Module,Dbi,我在共享主机服务器上。 我有一个perl模块文件,可以正常工作。我可以通过perl脚本文件毫无问题地使用它的subs。如果我把它添加到pm文件中 use DBI; my $username = "username"; my $password = "password"; my $dsn = "DBD:mysql:database"; # i changed DBD to DBI as well but no good 不过一切都很好。 但是,当我在perl模块文件中添加以下行时,perl脚本文

我在共享主机服务器上。 我有一个perl模块文件,可以正常工作。我可以通过perl脚本文件毫无问题地使用它的subs。如果我把它添加到pm文件中

use DBI;
my $username = "username";
my $password = "password";
my $dsn = "DBD:mysql:database"; # i changed DBD to DBI as well but no good
不过一切都很好。 但是,当我在perl模块文件中添加以下行时,perl脚本文件开始抱怨“在require中编译失败”

我试着用谷歌搜索,但没有结果。有什么想法吗?

数据源必须是“
DBI:mysql:database=my_database
”,在这里传递数据库的种类和名称


发生此错误的原因是必须安装数据库驱动程序模块
DBD::mysql
。询问您的主机是否安装了该模块,或者您是否可以自己安装。

我想创建一个dbi句柄,该句柄可由该模块的子模块使用,但在使用该句柄之前我遇到了错误(如问题中所述)。 可能是模块的安全特性,显然我只能在子表单中使用dbi

使用DBI
子数据库句柄{
我的$username=“username”;
我的$password=“password”;
my$dsn=“DBI:mysql:database”;
my$dbh=DBI->connect($dsn,$username,$password)或die$DBI::errstr;
返回$dbh}
my$dbh=databaseHandle()

我不知道具体的原因,但这就是我使用它的方式。
感谢所有的帮助和想法。

请修复您的数据源名称:它应该以
DBI:
开头。您的
DBD::mysql
驱动程序模块的安装似乎有问题。尝试在
use DBI
下面添加
use DBD::mysql
,看看是什么错误导致缺少驱动程序模块,而通常的
无法在@INC
中找到DBD/mysql.pm。OP在require中编译失败,这意味着该文件在那里,但包含我在问题中提到的一个错误,即我有dbd::mysql版本4.022,所以它在那里。
my $dbh = DBI->connect($dsn, $username, $password ) or die $DBI::errstr;