我在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函数内调用它。有人可以帮帮我吗?
答案 0 :(得分:1)
您的'$qid1'
不会插入/评估为QTG
。在函数调用中使用plain $qid1
(只是变量名,根本没有引号)。
证据:
perl -e "$qid1='QTG'; print '$qid1';"
$qid1
perl -e "$qid1='QTG'; print $qid1;"
QTG
发现其他错误:
;
#(c)stevieb @
:my $id=@idarr[0];
应为my $id = $idarr[0];
。