2011-08-03 29 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"; 
相关问题