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函数了。
php工作笔记8-并发和数据类型的更多相关文章
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)
<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步 并发问题是所有问题的基础,也是操作系统设计的基础.并发包括很多设计问题,其中有进程间通信,资源共享与竞争,多个 ...
- [笔记][Java7并发编程实战手冊]系列文件夹
推荐学习多线程之前要看的书. [笔记][思维导图]读深入理解JAVA内存模型整理的思维导图文章里面的思维导图或则相应的书籍.去看一遍. 能理解为什么并发编程就会出现故障. Java7并发编程实战手冊 ...
- 2016年第2周读书笔记与工作笔记 scrollIntoView()与datalist元素
这一周主要是看了html5网页开发实例与javascript 高级程序设计,供以后翻阅查找. html5网页开发实例第1章与第二章的2.1部分: 第1章内容: html5在w3c的发展史. 浏览器的 ...
- MYSQL基础笔记(六)- 数据类型一
数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...
- javascript - 工作笔记 (事件四)
在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装, JavaScript Code 12345 yx.bind(item, "click&quo ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- 工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境
上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...
- Java并发编程的艺术读书笔记(2)-并发编程模型
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...
随机推荐
- 关于蜂窝物联技术 NBIoT 的一些观点
背景 SigFox 开始于2009,这项技术对长期作为标准移动电话交互标准的3GPP造成了有力冲击.SigFox 解决了终端设备互联场景下的多个痛点: 1 过于复杂: 2 昂贵的设备: 3 耗电不持久 ...
- AngularJS中的Provider们:Service和Factory等的区别
引言 看了很多文章可能还是不太说得出AngularJS中的几个创建供应商(provider)的方法(factory(),service(),provider())到底有啥区别,啥时候该用啥,之前一直傻 ...
- Datatables回调函数中文
Datatables——回调函数 ------------------------------------------------- fnCookieCallback:还没有使用过 $(documen ...
- 《winform窗体应用程序》----------简易记事本
首先先给大家发表几张图片,描述一下记事本程序要实现的功能以及界面设计. 以上这些就是简易记事本的的主界面设计. 下面我们来做一些简单的讲解: 1.使用MenuStrip控件来实现菜单栏的基本设计. 在 ...
- winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体
winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体,搜集了几个方法,列举如下: 一 . 所有权法 父窗体,名称为“fuForm”,在父窗体中有个公共刷新方法,也就是窗体数据初始 ...
- LeetCode "Wiggle Subsequence" !
Another interesting DP. Lesson learnt: how you define state is crucial.. 1. if DP[i] is defined as, ...
- git常用命令 (阿里云code)
命令行指令 Git 全局设置 git config --global user.name "马会东" git config --global user.email "ma ...
- webstorm 运行配置gulp
打开Run/Debug Configurations,设置
- ASP.NET webform基于Jquery,AJAX的三级联动
主要html代码 <select id="province"> <option value="0">--请选择省份--</opti ...
- Java数组在内存中是如何存放的
阅读目录 一维数组 二维数组 数组对象及其引用存放在内存中的哪里? Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字“new”创建时,会在堆上分配内存空间,然后返回对 ...