首页 > 解决方案 > Perl dancer错误执行方法未定义

问题描述

我正在尝试使用 perl dancer 创建一个网站,下面是我的代码。这似乎是正确的,但是页面一直在加载并且永远不会在数据库中输入值。当我取消页面时,我收到一条错误消息“ request to POST /appform crashed: Can't call method "execute" on an undefined value”。我无法弄清楚代码中有什么问题。如果您有任何其他代码,请提及。我正在将 SQLite 用于数据库。有一个数据库campus.db,我在student表中插入值。

post '/appform' => sub {

        my $q = CGI ->new;
        my $name = $q->param ("firstname");
        my $password = $q->param("password");
        my $mobile_no = $q->param("mobile");
        my $gender = $q->param("gender");
        my $email = $q->param("email");
        my $address = $q->param("address");
        my $sslc = $q->param("SSLC");
        my $hsc = $q->param("HSC");
        my $cgpa = $q->param("cgpa");
        my $languages = $q->param("lang");
        my $internships = $q->param("intern");
        my $preferred_loc = $q->param("country");
        my $sql = "insert into student(name,mobile_no,gender,email,address,sslc,hsc,cgpa,languages,internships,preferred_loc,password,applied_job,company_applied) values ('?','?','?','?','?','?','?','?','?','?','?','?','?','?');";
        my $sth = database->prepare($sql); 
        $sth->execute($name,$mobile_no,$gender,$email,$address,$sslc,$hsc,$cgpa,$languages,$internships,$preferred_loc,$password) or die $sth->errstr;
        #$sth->execute();   
        $sth-> finish;
        set_flash('New entry posted!');
            redirect '/';
    };

标签: sqliteperldancer

解决方案


您正在使用database关键字来获取数据库句柄。我猜这是来自Dancer2::Plugin::Database(如果你可以在你的问题中包含这样的信息会很有用)。

该错误表明您正在调用execute()未定义的值。您正在调用execute()变量$sth。所以$sth是未定义的。您可以$sth通过调用prepare()database(). 所以看起来prepare()通话失败了。您应该检查该调用的返回值,如果失败则抛出错误。

失败的最常见原因prepare()是您试图编译包含错误的 SQL 语句。我在您的 SQL 中看不到任何明显的错误,但值得通过针对您的数据库手动运行它来检查它。

我看到您在 SQL 语句中使用了绑定参数。这是个好主意,但请注意,您不需要在 SQL 中引用问号 - 数据库驱动程序会为您处理。我认为这不是导致您的问题的原因。

我还看到您在 Dancer 应用程序中使用 CGI.pm 来获取请求参数。老实说,我对它的工作原理感到有点惊讶——但这是一个糟糕的主意。Dancer 有自己的关键字,可以为您提供这些信息。查看query_parameters()和在Dancer 文档body_parameters()中。route_parameters()


推荐阅读