perl – 为什么DBI的do方法返回“0E0”,如果零行受到影响?
发布时间:2020-12-15 21:13:53 所属栏目:大数据 来源:网络整理
导读:运行代码时遇到一个问题,类似于以下示例: my $rows = $dbh-do('UPDATE table SET deleted=NOW() WHERE id=?',undef,$id) or die $dbh-errstr;if (!$rows) { # do something else} 自从docs状态确定返回的行数受影响,我以为会工作. Prepare and execute a si
运行代码时遇到一个问题,类似于以下示例:
my $rows = $dbh->do('UPDATE table SET deleted=NOW() WHERE id=?',undef,$id) or die $dbh->errstr; if (!$rows) { # do something else } 自从docs状态确定返回的行数受影响,我以为会工作.
事实证明,我是错误的.当我调试它,我看到$rows实际上保??存字符串0E0,这当然是一个true-ish值.我进一步挖掘文档,看到这段代码:
在那里它返回0E0.我只是不明白为什么会这样做.有人知道吗? 解决方法
这是一个真正的价值,因此您可以将其与误差返回的虚假值进行区分,但数值等于零(无警告),因此它仍等于受影响的记录数.
$perl -e' for (undef,"0E0",4) { if ($_) { printf "Success: %d rows affectedn",$_; } else { print "Error!n"; } } ' Error! Success: 0 rows affected Success: 4 rows affected 如果在没有记录受到影响时成功返回0,那么您将被迫使用定义来检查错误,这比检测真实(foo()或die)方便得多. Other true zeroes.(忽略“0x0”;它警告.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |