我想用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