我在运行类似以下示例代码时遇到了问题:
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
实际上保存了字符串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
。我不明白为什么会这样。有人知道吗?