2013-10-11 2 views
0

아래의 mysql 데이터베이스에 연결할 dbConnection 서브 루틴을 작성한 perl 스크립트가 있습니다. 나는 아약스 액션에서이 서브 루틴을 호출하고 $ vb_db 변수에 데이터베이스 연결을 저장하고있다. 연결을 한 후 prepare 문을 실행하기 위해 $ vb_db 연결이 필요한 dataImport 서브 루틴에 다른 ajax 요청을하고있다. 그러나 dataImport 서브 루틴에 대한 두 번째 아약스 호출에서 변수 $ vb_db에 값을 얻지 못하고 쿼리 실행에 실패했습니다.동일한 perl 스크립트에서 다른 ajax 요청 액션에 perl dbi 연결을 저장하고 가져 오는 방법

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"); 
} 

두 번째 아약스 전화에서 $ vb_db 값을 어떻게 얻을 수 있습니까? 도와주세요.

+0

db 연결 매개 변수가 html 형식에서 가져온 것이라면 어딘가에 저장해야합니다. http://search.cpan.org/~sherzodr/CGI-Session-3.95/Session/Tutorial.pm –

+0

감사! 나는 세션을 사용하고있다. – Laeeq

답변

1

연결을 설정하기 위해 하나의 아약스 요청을 수행 한 다음 dataImport를 실행하기 위해 두 번째 아약스 호출을 수행하는 경우 서버 측의 db 연결을 어떻게 든 캐싱하지 않으면 작동하지 않습니다. cgi를 사용하면 프로그램이 시작되고 요청을 처리 한 다음 종료합니다. 즉, DBI 연결이 범위를 벗어나서 얻을 수 있습니다 (perl이 종료되기 때문에). 1. 모든 요청에 ​​db 커넥션을 생성합니다 (그리고 mpapec은 사용자/패스 등을 저장하여이를 수행 할 수 있습니다). 2. Catalyst와 같은 많은 펄 웹 프레임 워크 중 하나를 통해 영구 애플리케이션으로 실행합니다./Mojo/Dancer와 dbi 연결 캐시/풀의 일부 유형이 있습니다.