2013-02-28 45 views
1

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

例如,我有说

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

在地方的“5”中选择命令“问题1”中的打印命令中列出上市的命令,我想放东西的地方它就像“变量”,以便我可以创建一个带有这些命令的子例程,但是您可以通过为这些变量插入不同的值来执行并反复运行子例程。 ($ dsn,$ user,$ password); $ dbh = DBI-> connect($ dsn,$ user,$ password); $ dbh = DBI-> connect($ dsn,$ user,$ password); $ dbh $ DBI-> connect 不知道如何去做这个为MySQL Perl。

回答

2

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

$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"; 
    } 
} 
+0

我正在寻找手动输入记事本中的值到占位符中,但我使用记事本条目中的这些信息对mysql表进行排序。有无论如何创建一个命令来运行子程序,所以我可以复制并粘贴到命令的值进入占位符? – a11 2013-02-28 22:42:52

+2

记事本?多么可怕。复制/粘贴声音更糟糕。什么阻止你直接从文件中读取信息?如果不知道你的输入是什么样子,那么很难推荐任何东西。 – TLP 2013-02-28 22:46:38

+0

是的,我应该澄清更多。我在mysql中有一个大于170,000个基因的表格。在记事本中,我有一个由4列组成的列表:reg。元素,以及它们的染色体,开始位置,结束位置。我做了perl的mysql命令,在每个reg最近的mysql表中查找基因。元件。现在我必须为其余的reg寻找最近的基因。在记事本中列出的元素 - 并且有很多。 – a11 2013-02-28 23:09:29

0

我喜欢运行前准备建立选择查询()。然后将它作为标量传递给prepare()。您也可以在标量中添加占位符(如果您不想简单地为每个查询重新构建它),那么可以很容易地通过s ///调用来替换占位符,这可以很容易地命名/标识。这会使代码更易于阅读,而不是将裸值传递给execute()。