我在运行类似于以下示例的代码时遇到了问题:
my $rows = $dbh->do('UPDATE table SET deleted=NOW() WHERE id=?', undef, $id)
or die $dbh->errstr;
if (!$rows) {
# do something else
}
由于文档状态do
返回受影响的行数,我认为这会起作用。
准备并执行单个语句。返回受影响或
undef
出错的行数。返回值-1
表示行数未知、不适用或不可用。
事实证明,我错了。当我调试它时,我看到它$rows
实际上包含 string 0E0
,这当然是一个真实的值。我进一步挖掘了文档并看到了这段代码:
默认的 do 方法在逻辑上类似于:
sub do { my($dbh, $statement, $attr, @bind_values) = @_; my $sth = $dbh->prepare($statement, $attr) or return undef; $sth->execute(@bind_values) or return undef; my $rows = $sth->rows; ($rows == 0) ? "0E0" : $rows; # always return true if no error }
它在那里。它返回0E0
。我只是不明白为什么它会那样做。有人知道吗?