1

我有两个 mysql 命令。我想用这两个 mysql 命令为我必须搜索的其余数据创建一个子例程。我有很多条目。有没有办法创建一个子例程,以便代替我在两个 mysql 命令中输入的实际数字和字符,我输入可以替换的变量,这样我就可以复制并粘贴这些变量和命令的实际值对剩余的条目执行?

例如,我有一个命令说

$sth = $dbh->prepare ("select name from table1 where number > 5");
$sth->execute();
@row;
while (@row = $sth->fetchrow_array) {
print "$row[0]\tquestion1\n";

代替 select 命令中列出的“5”和 print 命令中列出的“question1”,我想用“变量”之类的东西代替它,这样我就可以创建一个包含这些命令的子例程,但是你执行并可以通过为这些变量插入不同的值来一遍又一遍地运行子例程。

像这样: $dbh = DBI->connect($dsn, $user, $password); 不确定如何为 mysql perl 执行此操作。

4

2 回答 2

2

您可以在查询中使用占位符在搜索中使用不同的值。

$sth = $dbh->prepare ("select name from table1 where number > ?");
$sth->execute(5);

之后,为您的打印创建一个子程序应该很简单。

例如:

my @values = qw(5 10 15 20);
my @fields = qw(question1 question2);
# ... other code..
my $sth = $dbh->prepare ("select name from table1 where number > ?");

for my $field (@fields) {
    for my $value (@values) {
        printfields($sth, $value, $field);
    }
}

sub printfields {
    my ($sth, $value, $field) = @_;
    $sth->execute($value);
    while (my @row = $sth->fetchrow_array) {
        print "$row[0]\t$field\n";
    }
}
于 2013-02-28T22:37:11.847 回答
0

我更喜欢在运行 prepare() 之前构建选择查询。然后将其作为标量传递给 prepare()。您还可以在标量中添加占位符(如果您不想简单地为每个查询重建它),可以通过调用 s///; 轻松替换它们,也可以轻松命名/识别。这将使代码比将裸值传递给 execute() 更容易阅读。

于 2013-03-01T03:21:33.447 回答