2016-07-28 15 views
5

Tôi đã viết một chương trình Perl mẫu để xóa dữ liệu từ một bảng cơ sở dữ liệu.Tại sao tôi nhận được 0E0 cho giá trị trả về của phương thức "thực thi" DBI?

Đây là mã tôi đã viết,

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"; 
    } 
} 

Nếu tôi đã thực hiện ở trên nó nên in thông điệp thành công và sau đó số hàng bị xóa.

Nếu bảng trống thì đang in 0E0 thay vì 0. Tôi không biết nó trả về giá trị như thế nào?

Ai đó có thể giải thích cho tôi cách thức hoạt động của nó?

+1

Bạn đã viết * "Trong đó tôi đã sử dụng phương thức' do' để thực hiện truy vấn "* nhưng chương trình của bạn * không * sử dụng phương thức' do' vì vậy tôi đã xóa câu đó. Xin vui lòng cũng thụt lề mã Perl của bạn đúng cách để nó có thể đọc được, đặc biệt là trước khi yêu cầu giúp đỡ với nó. – Borodin

+0

Cảm ơn Borodin. Tôi sẽ thay đổi nó. –

Trả lời

9

Thực hiện theo cách này để cho phép kiểm tra xem hoạt động có thành công hay không. Lý do là '0E0' (dưới dạng chuỗi) là giá trị thực, nhưng 0 là một giá trị sai trong Perl. Do đó:

  1. bạn có thể kiểm tra giá trị trả về trong if để xác định xem cuộc phẫu thuật đã thành công (đúng nghĩa với thành công),

  2. nhưng bạn cũng có thể sử dụng giá trị trả về là một số để biết chính xác số hàng đã xóa, vì 0E0 đánh giá là 0 khi được sử dụng làm số.

Nếu bạn chỉ cần số hàng đã xóa, bạn có thể sử dụng $res + 0 hoặc $res * 1. Nhưng chỉ sau khi bạn đã kiểm tra hoạt động đã thành công.

Các vấn đề liên quan