perl – 为什么DBI的do方法返回“0E0”,如果零行受到影响?

前端之家收集整理的这篇文章主要介绍了perl – 为什么DBI的do方法返回“0E0”,如果零行受到影响?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
运行代码时遇到一个问题,类似于以下示例:
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 affected\n",$_;
      } else {
         print "Error!\n";
      }
   }
'
Error!
Success: 0 rows affected
Success: 4 rows affected

如果在没有记录受到影响时成功返回0,那么您将被迫使用定义来检查错误,这比检测真实(foo()或die)方便得多.

Other true zeroes.(忽略“0x0”;它警告.)

猜你在找的Perl相关文章