2011-08-03 16 views

回答

5

大約從execute method in DBI文檔:

對於非「SELECT」語句,「執行」返回受影響,如果已知行 數。如果沒有行受到影響,那麼「執行」返回 「0E0」,Perl會將其視爲0,但將視爲true。請注意, 它是 對於沒有行受語句影響而言不是錯誤。如果 受影響的行數未知,則「execute」返回-1。

+0

您如何知道語句是否首先出現語法錯誤? –

+0

@R__:'prepare'返回undef。儘管DBI文檔給出了示例'$ sth = $ dbh-> prepare($ statement)或者$ dbh-> errstr;'這個提示,但DBI文檔顯然比這個明確一點。 –

+0

這似乎不再正確,至少在版本4.007中。 execute將返回*匹配*行數,而不是*受影響*行數。 – 2012-04-10 20:28:36

2

如果您的查詢是非選擇之一(例如UPDATE或DELETE),那麼你可以採取的rows優勢:

my $query = "..."; # your query 
my $sth = $dbh->prepare($query); 
$sth->execute(); 
print "Number of rows affected: " . $sth->rows . "\n"; 

返回行數的影響通過最後的查詢或者在發生錯誤的情況下,使用-1。但是,通過設計,對於SELECT語句,您不能依賴

請注意,對於非SELECT查詢,execute也會返回受影響的行數。然而,如果沒有行受到影響,那麼執行返回「0E0」(該Perl應該被視爲)。

my $query = "..."; # your query 
my $sth = $dbh->prepare($query); 
my $numrows = $sth->execute(); 
print "Number of rows affected: " . $numrows . "\n"; 

相反,如果你的查詢是SELECT,那麼你可以不依靠

但是,您可以執行:

my $query = "SELECT COUNT(*) AS rows FROM ... WHERE ..."; 
my $numrows = $dbh->selectrow_array($query, undef); 
print "Number of rows: " . $numrows . "\n"; 

,或類似:

my $query = "SELECT COUNT(*) AS rows FROM ... WHERE ..."; 
my $numrows = $dbh->selectall_arrayref($query, { Slice => {} }); 
print "Number of rows: " . @$numrows[0]->{rows} . "\n"; 
相關問題