0

以下のようなmysqlデータベースに接続するためのdbConnectionサブルーチンを作成したperlスクリプトがあります。私は ajax アクションでこのサブルーチンを呼び出し、データベース接続を $vb_db 変数に保存しています。接続を確立した後、prepare ステートメントを実行するために $vb_db 接続が必要な dataImport サブルーチンに別の ajax リクエストを作成しています。しかし、dataImport サブルーチンの 2 回目の 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");
}

2 回目の ajax 呼び出しで $vb_db 値を取得するにはどうすればよいですか。助けてください。

4

1 に答える 1

1

接続をセットアップするために 1 つの ajax 要求を実行し、次に dataImport を実行するために 2 番目の ajax 呼び出しを実行している場合、サーバー側で db 接続を何らかの方法でキャッシュしていない限り、機能しません。cgi を使用すると、プログラムが起動し、要求を処理してから終了します。これは、DBI 接続が範囲外になり、リープされることを意味します (perl が終了したため)。1. リクエストごとに db 接続を作成する (および mpapec が言うように、これを実行できるようにユーザー/パスなどを保存する) または 2. Catalyst などの多くの perl Web フレームワークの 1 つを介して永続的なアプリケーションとして実行する必要があります。 /Mojo/Dancer には、ある種の dbi 接続キャッシュ/プールがあります。

于 2013-10-12T01:28:56.210 に答える