【问题标题】:Can't call method "prepare" on an undefined value using Perl DBI无法使用 Perl DBI 对未定义的值调用方法“准备”
【发布时间】:2017-06-20 08:00:31
【问题描述】:

我在 Perl 模块中有一个 sub,Advancer.pm:

sub validate_extra {
    my ($dbh, $customer_id, $site) = @_;
    my $sth = $dbh->prepare(qq{
            SELECT key
            FROM master
            WHERE
                code = ?
                AND set = ?
                AND type_id = 2
                ORDER BY customer_id DESC, site DESC
            LIMIT 1
    });
    $sth->execute($customer_id, $site);

但是当我从测试 (.t) 调用这个模块时,我得到一个错误:

无法在 Advancer.pm 第 511 行对未定义值调用方法“prepare”。

 my $sth = $dbh->prepare(qq{

是第 511 行。

【问题讨论】:

  • validate_extra 的调用是什么样的?乍一看,您似乎未能传入值,或者未能传入已定义的数据库句柄。您是否验证数据库连接成功?

标签: perl dbi


【解决方案1】:

您将第一个参数的未定义值传递给validate_extra

很明显,如果你的电话只是

validate_extra();

但您可能错误地传递了错误的变量,或者原始连接失败但未检查:

my $dbh = DBI->connect('DBI:mysql:database=mydb', 'user', 'pass', {PrintError => 0});

validate_extra($dbh, $customer, $site);

【讨论】:

    猜你喜欢
    • 2016-12-22
    • 2020-06-25
    • 1970-01-01
    • 2016-06-23
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多