0

我有一个 perl 脚本,其中我创建了一个 dbConnection 子例程来连接到如下所示的 mysql 数据库。我在 ajax 操作上调用此子例程并将数据库连接存储在 $vb_db 变量中。建立连接后,我正在向 dataImport 子例程发出另一个 ajax 请求,我需要 $vb_db 连接来执行准备语句。但是在对 dataImport 子例程的第二次 ajax 调用中,我没有在 $vb_db 变量中获得任何值并且查询执行失败。

my $vb_db;
sub dbConnection {  
    my $db_host = $FORM{db_host};
    my $database = $FORM{database};
    my $db_user = $FORM{db_user};
    my $db_password = $FORM{db_password};       
    $vb_db = DBI->connect("DBI:mysql:$database;host=$db_host", $db_user, $db_password);

}

sub dataImport {
       my $records = $vb_db -> prepare("SELECT nodeid, title, description FROM node");
}

如何在第二个 ajax 调用中获得 $vb_db 值。请帮忙。

4

1 回答 1

1

如果您正在执行一个 ajax 请求来设置连接,然后您正在执行第二个 ajax 调用来运行 dataImport,除非您以某种方式在服务器端缓存 db 连接,否则它将永远无法工作。使用 cgi,程序启动,为请求提供服务,然后退出。这意味着您的 DBI 连接超出了范围并获得了收获(因为 perl 退出了)。您需要 1. 在每个请求上创建数据库连接(正如 mpapec 所说,存储用户/密码等以便您可以执行此操作)或 2. 通过许多 perl Web 框架(如 Catalyst)之一作为持久应用程序运行/Mojo/Dancer 并具有某种类型的 dbi 连接缓存/池。

于 2013-10-12T01:28:56.210 回答