2013-02-28 46 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()。

相關問題