DBI接口中可以灵活地用DDLDML语句来操作各类数据库,不过我在判断非SELECTDML语句返回时发现一个很容易被误用的例子。如
$dbh->do(“update tempa set col1=100 where col2=’god’”);
用过的人都知道,该语句返回的是被改动的行数。问题就是当没有一行更新时,其返回是0E0My God!科学计数法的0,小心了,用if($ret)则认为没更新也正确了,这很可能不是你业务逻辑上所想要的结果。最好的方法用if($ret>0),如果肯定至多一行时,可以用if($ret==1)来判断。当然为了周密起见,应该考虑返回undef的情况。返回值总结如下:
update,insert,delete 0row affected return 0E0(warning: not 0)
error in statement return undef.
or the row number.