【问题标题】:using DBI causes module file compilation Error使用 DBI 导致模块文件编译错误
【发布时间】:2015-06-19 17:31:13
【问题描述】:
  • perl 版本是 5.8.8
  • mysql版本为5.5.42
  • DBI 版本是 1.633,DBD::mysql 版本是 4.022

我在共享托管服务器上。 我有一个运行良好的 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 脚本文件就会开始抱怨“Compilation failed in require”

my $dbh = DBI->connect($dsn, $username, $password ) or die $DBI::errstr;

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

【问题讨论】:

  • 请修正您的数据源名称:它应该以DBI: 开头。您的DBD::mysql 驱动程序模块的安装似乎有问题。尝试在use DBI 下方添加use DBD::mysql,看看会出现什么错误

标签: perl perl-module dbi


【解决方案1】:

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

使用 DBI;
子数据库句柄{
我的 $username = "用户名";
我的 $password = "密码";
我的 $dsn = "DBI:mysql:database";
我的 $dbh = DBI->connect($dsn, $username, $password ) 或死 $DBI::errstr;
返回 $dbh }
我的 $dbh = 数据库句柄();

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

【讨论】:

    【解决方案2】:

    数据源必须是“DBI:mysql:database=my_database”,您可以在其中传递数据库的种类和名称。

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

    【讨论】:

    • 缺少驱动程序模块将导致通常的Can't locate DBD/mysql.pm in @INC。 OP 正在获取Compilation failed in require,这意味着文件存在但包含错误
    • 我在我的问题中提到我有 dbd::mysql 版本 4.022,所以它就在那里。
    猜你喜欢
    • 2021-12-17
    • 2023-03-05
    • 1970-01-01
    • 2020-06-07
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多