我有一个PostgreSQL数据库和一个像这样的Perl脚本
sub reassign_minions {
my $self = shift;
my @users = $self->get_userids_of_minions();
my $sth = $self->dbh->prepare(qq{update users set reports_to = ? where userid = ?});
$sth->execute($self->reports_to, $user);
$sth->finish;
}
@users
假设包含多个用户ID(整数)的数组。对于它返回的每个用户ID,我想用变量更新reports_to
列,但我不确定如何查询多个变量。
如果它只是一个就很容易,因为我可以将变量参数设置为$userid
之类的东西,就像我上面所说的那样。但由于可以传入的ID数量不固定,我不知道该怎么做。
我还被告知有一种方法可以在不使用循环的情况下执行此操作,因为我最初有一个for
循环。
答案 0 :(得分:4)
将IN
与占位符一起使用
sub reassign_minions {
my $self = shift;
my @users = $self->get_userids_of_minions();
my $in = join ',', ('?') x @users;
my $sth = $self->dbh->prepare(qq{update users set reports_to = ? where userid IN ($in)});
$sth->execute($self->reports_to, @users) or die $self->dbh->errstr;;
$sth->finish;
}
答案 1 :(得分:-1)
试试这个
my $sth = $self->dbh>prepare(qq{update users set reports_to = ? where userid = ?});
foreach my $user(@users) {
$sth->execute($self->reports_to, $user);
}
$sth->finish;