Perl   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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状态确定返回的行数受影响,我以为会工作.

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

在那里它返回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 – 为什么DBI的do方法返回“0E0”,如果零行受到影响?全部内容,希望文章能够帮你解决perl – 为什么DBI的do方法返回“0E0”,如果零行受到影响?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: