记录一次程序输出和DB查询不匹配的问题

今天发生一件很神奇的事情,我用TP读取DB数据,然后打印出来的数据,和直接通过sequal pro查询出来的数据(某一列),怎么对都对不起来,我尝试

  • 清空TP缓存
  • MYSQL服务重启
  • mac重启

都无功而返,最后我发现问题出在这里

$model = new Model();
$model->startTrans();
.
.
.
.
.

// 写明细
$saveData = $this->getChkSaveItems($refund_items);
$saveData && $flag = $applyItem->saveAll($saveData);

//这里是重点
// $model->commit();

$refund_rst = M('b2b_refunds_apply_item')->field($fields)->group("{$voucher_type}")->where($where)->select();
        
echo '<pre>';
print_r($refund_rst);
echo '</pre>';
exit;

也就是说,我在打印数据的时候还在事务之内,还没commit或者rollback,而在打印这个结果之前,我刚对该列执行了update操作,所以之后我再读取这一列,实际上读取的是内存的值,并不是DB里的值。只有commit或者rollback之后,我再打印,那就和DB的值一致了。

原文地址:https://www.cnblogs.com/linux-centos/p/10613045.html