无法在子例程perl

时间:2015-08-10 19:09:29

标签: perl database-connection

我在SQL内创建subroutine数据库连接时遇到问题。下面的代码保存在服务器上,文件名为“ALabel”

package ALabel;
use strict;
use warnings;
use DBI;
#!/usr/bin/perl
use lib '/var/www/cgi-bin/ssiweb824/Navik';



sub ALabelPipe
{

    my $sth;
    my $sql;
    my @idarr=@_;
my $id=@idarr[0];
my $databasename=@idarr[1];
my $code=@idarr[2];

    my $dbh = DBI->connect('dbi:mysql:database=$databasename','username','password');        

    $sql = "SELECT * FROM Table1 where ID='".$id."'"."and Pcode='".$code."'";
    $sth = $dbh->prepare($sql);
    $sth->execute;
    $dbh->disconnect;
    my @abc = $sth->fetchrow_array();
    return $abc[2];


}

以下是我访问ALabel文件并访问此代码的方法。

#!/usr/bin/perl
use lib '/var/www/cgi-bin/ssiweb824/Navik';
use ALabel;
my $qid1="QTG"
$studyname="databasename"
my $abc=ALabel::ALabelPipe('$qid1',$studyname,1);
return $abc;

当我在Alabel管道子程序之外编写$dbh时,此代码工作正常,但由于我需要将数据库名称设置为动态并需要将其作为参数传递,我需要在ALabelpipe函数内调用它。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您的'$qid1'不会插入/评估为QTG。在函数调用中使用plain $qid1(只是变量名,根本没有引号)。

证据:

perl -e "$qid1='QTG'; print '$qid1';"
$qid1

perl -e "$qid1='QTG'; print $qid1;"
QTG

发现其他错误:

  1. 缺少;#(c)stevieb
  2. 访问数组元素时错误的签名@my $id=@idarr[0];应为my $id = $idarr[0];