2016-07-28 74 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。但是只有在你测试了手术成功之后。

相关问题