我想用perl CGI來刪除數據庫中的數據,但它顯示了我的錯誤: 全局符號「$ queryDelete」需要在Dbm.pm行明確包名10
package Dbm;
use DBI;
use strict;
use POSIX "fmod";
sub connection {
return DBI->connect("DBI:mysql:boys:127.0.0.1" ,'root','');
};
sub do_delete {
my $rData = shift;
$queryDelete = " WHERE ";
my $cWhere = get_condition($rData);
my $queryDelete="DELETE FROM $rData->{table} $cWhere";
my $dbh = connection;
my $sqlDelete = $dbh->prepare($queryDelete) or die "Can't prepare $queryDelete: $dbh->errstr\n";
return ($sqlDelete->execute) or die "can't execute the query: $sqlDelete->errstr";
}
sub get_condition{
my $rData = shift;
my $cWhere = " 1=1 ";
while (my ($key,$value) = each $rData->{condition}) {
if (ref($value) eq 'ARRAY'){
$cWhere .= " AND ";
#print $key.$value->[0];
my $counter=0;
foreach my $cValueArray (@{$value}){
if(fmod($counter,3)==0) {
$cWhere.=" ".$key." ".$cValueArray." ";
}
else {
$cWhere.= " ".$cValueArray. " ";
}
$counter++;
}
}else{
#print "$key=$value\n
$cWhere .= " AND ". $key."=". $value;
}
};
return $cWhere;
}
1;
test.pl
my $q = new CGI();
my $handle = Dbm::connection();
sub test_delete{
my $rData = {
table =>'boys',
condition => {
ID => 99,
Emri => ['<>','\'mon\'','AND','like','\'boy%\''],
}
};
return Dbm::do_delete($rData);
};
print $q-> start_html(
-title => "Main",
-style => [ {-src =>'/media/css/ui-lightness/jquery-ui-1.10.3.custom.css', -rel=>'alternate'},
{-src =>'/media/css/ui-lightness/mystyle.css', -rel=>'stylesheet', -type=>'text/css'}
],
-script => [
{ -src=>'/media/js/jquery-1.9.1.js'},
{ -src=>'/media/js/jquery-ui-1.10.3.custom.js' }
]
);
print test_delete();
現在顯示我:全局符號「%rDataUpd」需要在Dbm.pm線44.明確包名此代碼:子_do_update { \t我$ rDataUpd = shift; \t my $ cQueryUpd =「UPDATE」。 「」。 $ rDataUpd {table}。 「」。 「SET」。 「」; (我的($ keyUpd,$ valUpd)=每個$ rDataUpd - > {data}){ \t $ cQueryUpd。= $ keyUpd。「=」。 「」。 $ valUpd。 「」; \t}; \t \t $ cQueryUpd。=「WHERE」; \t $ cQueryUpd。= get_condition($ rDataUpd)。「
」; return $ cQueryUpd; } – Armida
請你可以看看這個問題嗎?或者你想讓我編輯我的代碼? – Armida
@Armida,現在你試圖使用一個標量('$ rDataUpd')作爲一個散列('%rDataUpd')。我認爲它應該是一個哈希*參考*。所以你可能想要'$ rDataUpd - > {table}' – friedo