2011-03-16 83 views
7

你能否將disconnect-代碼的部分內容作爲線路噪聲調用,還是將它保留原樣?如果你是從你的程序退出已完成所有工作後,從數據庫DBI:disconnect - question

use DBI; 

my $dbh = DBI->connect ... 
... 
... 
END { 
    $dbh->disconnect or die $DBI::errstr if $dbh; 
} 
+1

至少,使用RaiseError或HandleError,你不需要'或死...' – runrig 2011-03-16 14:45:15

回答

3

明確斷開不是絕對必要的。但這是一個好主意,尤其是在執行多個連接或將執行多個順序連接的程序中。

有關更多信息,請參閱Programming the Perl DBI

+0

鏈接已經死亡。這裏有一個鏈接,當它最後有內容時它看起來像什麼。 https://web.archive.org/web/20141018180208/http://oreilly.com/catalog/perldbi/chapter/ch04.html – Karl 2016-01-05 18:42:25

0

在腳本結束時,它可能沒有多大關係。不過,無論如何,只要明確地清理一下就可以了。它肯定不會受到傷害,我懷疑可能會出現一些肯定會有所幫助的情況。

2

要小心。

perl -le 'use DBI;my $h = DBI->connect("dbi:ODBC:test","test","test", {AutoCommit => 0, RaiseError=>1}); $h->do(q/insert into mje values(?, ?)/, undef, 1, "fred");' 

發行回滾()由於沒有明確斷開DBD :: ODBC :: DB手柄測試()來破壞:如果禁用自動提交,並根據您是否斷開不承諾你可以打一些有趣的情況下, 。

請注意,因爲沒有明確的斷開連接,插入被回滾,我們得到一個錯誤。

perl -le 'use DBI;my $h = DBI->connect("dbi:ODBC:test","test","test", {AutoCommit => 0, RaiseError=>1}); $h->do(q/insert into mje values(?, ?)/, undef, 1, "fred");$h->disconnect or die $DBI::errstr;' 

這裏看起來沒有錯,即使提交沒有被調用,但行並沒有進入數據庫。因此,斷開連接掩蓋了行未提交的事實。

0

我不認爲這是絕對必要的,但我覺得它更整潔。