2016-07-28 75 views
5

我寫了一個示例Perl程序來刪除數據庫表中的數據。爲什麼我得到0E0的DBI「execute」方法的返回值?

這是我所編寫的代碼,

use DBI; 

my $dbh = DBI->connect("DBI:Pg:host=192.168.12.23;port=5432;", "adhi");                     
if ($dbh) { 

    print "Connected successfully\n"; 

    my $exe = $dbh->prepare("delete from perl_test.test"); 
    my $res = $exe->execute(); 
    if ($res) { 
     print "deleted the table successfully of rows: $res\n"; 
    } 
} 

如果我已經執行了它上面應該打印成功消息,然後刪除的行的數量。

如果該表爲空,則打印0E0而不是0。 我不知道它是如何返回這樣的值?

有人可以請解釋我是如何工作的?

+1

你寫了*「因爲我用'do'方法來執行查詢」*但是你的程序*不使用'do'方法,所以我刪除了那個句子。請正確地縮進您的Perl代碼,以便它可讀,特別是在請求幫助之前。 – Borodin

+0

感謝鮑羅丁。我會改變它。 –

回答

9

這樣做是爲了測試操作是否成功。原因是'0E0'(作爲字符串)是一個真正的值,但0在Perl中是一個錯誤的值。因此:

  1. 您可以在if測試返回值來確定操作是否成功(true表示成功),

  2. ,但你也可以使用返回值作爲一個數字來知道確切的被刪除的行數,因爲0E0在作爲數字使用時計算爲0。

如果您需要刪除的行只是數,你可以使用$res + 0$res * 1。但是隻有在你測試了手術成功之後。

相關問題