加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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状态确定返回的行数受影响,我以为会工作.

Prepare and execute a single statement. Returns the number of rows
affected or undef on error. A return value of -1 means the number of
rows is not known,not applicable,or not available.

事实证明,我是错误的.当我调试它,我看到$rows实际上保??存字符串0E0,这当然是一个true-ish值.我进一步挖掘文档,看到这段代码:

The default do method is logically similar to:

06001

在那里它返回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”;它警告.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读