• php工作笔记8-并发和数据类型


    1、mysql在进行数据的修改时,并发情况下:

      $RoundsRows=$modelRounds->where("id=$roundsID and (sendMoney + $amount <= 

    TotalMoney)")->setInc('SendMoney',$amount);

    2、在mysql事务中,会有幻读,在事务中可以并发读,某一资源,

    $modelOrder->startTrans(); //开启事务操作

    $NOW=date("Y-m-d H:i:s");
    $maxPayConfirmID=$modelOrder->max("PayConfirmID");
    $maxPayConfirmID++;

    $saveArr_order=array(
    "OrderStatus" =>1,
    "PayStatus" =>2,
    "PayTime" =>$NOW,
    "ConfirmTime" =>$NOW,
    "PayConfirmID"=>$maxPayConfirmID
    );


    $saveRows=$modelOrder->where("OrderSn='$out_trade_no' AND OrderStatus=0
    AND PayStatus=1")->save($saveArr_order);


    修改为下面就好了,在事务中,不可以并发写,

    $modelOrder->startTrans(); //开启事务操作

    $NOW=date("Y-m-d H:i:s");

    //2.订单操作记录
    $addArr_oaction=array(
    "OrderSn" =>$out_trade_no,
    "ActionUser" =>0,
    "OrderStatus" =>1,
    "CreateTime" =>$NOW
    );

    $add_OactionID=$modelOaction->add($addArr_oaction);


    if(empty($add_OactionID))
    {
    $modelOrder->rollback();
    $this->recordLogs("wxpay_oaction_fail","更改订单操作失败","更改订单
    操作失败");
    $this->stopCallback();
    }

    //1.更改订单,已确认,已付款


    $maxPayConfirmID=$add_OactionID;//$modelOrder->max("PayConfirmID");

    $saveArr_order=array(
    "OrderStatus" =>1,
    "PayStatus" =>2,
    "PayTime" =>$NOW,
    "ConfirmTime" =>$NOW,
    "PayConfirmID"=>$maxPayConfirmID
    );


    $saveRows=$modelOrder->where("OrderSn='$out_trade_no' AND OrderStatus=0
    AND PayStatus=1")->save($saveArr_order);

    3、double转成int会有定都丢失

     转换为string再转换为int

    这个是PHP document中给出来的提示:

    简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格
    式。
    floor(( 0.1 + 0.7 ) * 10) 返回 7 而不是8,
    (int)(( 0.1 + 0.7 ) * 10) 返回7而不是8.

    对这种现象的解释是“因为该结果内部的表示其实是类似 7.9”。

    所以得到的结论是:
    所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
    决不要将未知的分数强制转换为Int。

    (int)round( 0.1 + 0.7 ) * 10) 这样似乎就安全了。
    在有大量乘除或者是中间值为float类型时,为了数值精度还是使用BC math函数了。

  • 相关阅读:
    Apache commons-net用法的一个示例
    Apache commons(Java常用工具包)简介
    MyBatis动态sql之${}和#{}区别
    Spring事务管理
    Spring:源码解读Spring IOC原理
    Spring常用注解总结
    maven常用命令
    Spring事务回滚和异常类
    CSS3--难以想象的滤镜效果
    Composer安装
  • 原文地址:https://www.cnblogs.com/wl14253/p/5126519.html
Copyright © 2020-2023  润新知