ecshop 秒杀并发时库存会被减到小于0的解决办法

ecshop 秒杀并发时库存会被减到小于0更新库存后,再进行库存检查,如果库存为负数,则执行事务的回滚。

begin();//开始一个事物处理开始

$sql = "UPDATE ".$GLOBALS[‘a‘]->table(‘seconds_kill‘)."     SET kill_stock = kill_stock - 1     WHERE sk_id=‘".$sk_id."‘ LIMIT 1" ;
$GLOBALS[‘db‘]->query($sql);

$sql = "SELECT kill_stock ".    " FROM ".$GLOBALS[‘a‘]->table(‘seconds_kill‘).    " WHERE sk_id=‘".$sk_id."‘";
$kucun = $GLOBALS[‘db‘]->getOne($sql);

if($kucun<0){
    rollback();
    show_message(‘很抱歉,您购买的商品库存不足! ‘, ‘返回‘, ‘‘, ‘error‘);
    die();
}else{
    commit();
}

//开始
function begin(){
    $GLOBALS[‘db‘] -> query("set autocommit=0");//设置自动提交
    $GLOBALS[‘db‘] -> query("begin");//事务开始
}

//提交
function commit(){
    $GLOBALS[‘db‘] -> query("commit");//提交
    $GLOBALS[‘db‘] -> query("set autocommit=1");
}

//回滚
function rollback(){
    $GLOBALS[‘db‘] -> query("rollback");//回滚所做的数据库更改
    $GLOBALS[‘db‘] -> query("set autocommit=1");
}
时间: 2024-08-07 08:23:08

ecshop 秒杀并发时库存会被减到小于0的解决办法的相关文章

ecshop 删除订单时提示“以下订单无法被移除”的解决办法

最近在使用的过程中发现,Ecshop的订单竟然无法直接删除. 经过技术的检查,发现了几个特点. 第一点,已发货订单无法删除.第二点,已付款订单第三点,已生效订单. 满足以上三点的任何一点,都不能删除订单,因为一旦删除订单,款项就会返回到用户的帐户中. 相当于退款了..所以这个操作必须经过一番确认之后才可以进行删除. 第一种情况:已发货订单删除流程,"后台 -> 订单管理 -> 订单列表 -> 查看 -> 设置未发货","后台 -> 订单管理 -&

Python-使用unrar库时Couldn&#39;t find path to unrar library的解决办法

在Pycharm安装完unrar后,还要安装rar官方的库 不然运行的时候会抛出Couldn't find path to unrar library的错误 Windows: 下载rarlib的库文件,地址:http://www.rarlab.com/rar/UnRARDLL.exe 下载安装,默认设置就好了 安装完成后要设置环境变量 如果是64位操作系统 设置完环境变量后重启Pycharm Linux: 下载地址:http://www.rarlab.com/rar/unrarsrc-5.4.5

docx转doc时,防止公式被转成图片的解决办法

编辑社回复需要doc(Word 97-2003)格式的文档,可是将docx(Word 2007+)另存为doc格式时,发现公式被转成了图片.其实,最简单的办法就是,打个电话过去给编辑社:“大爷,拜托您用高版本的Word行吗?” 但是,我是不会这么干的.多番查阅资料,找到原因,并亲身实验找到一个可行的解决办法,也许还有更容易的办法. 原因:doc(Word 97-2003)使用公式3.0:docx(Word 2007+)默认使用MathType,当然也支持公式3.0.如果在docx文档中直接使用“

使用alipaySDK编译时找不到openssl/asn1.h文件的解决办法

构建新的项目时,在重新引入alipaySDK进行编译之后出现了一个错误:找不到 #include<openssl/asn1.h> 这个文件 首先排除是SDK的问题以及代码问题.在重新翻看了官方文档以及网上的一些帖子之后大致推断出问题出现的原因可能是由于文件路径的变化导致了配置信息出现错误.所以我的解决办法是重新配置文件路径. 1.打开项目,点击Build Settings,选择Header Search Paths. 2.在Header Search Paths对应的输入框中添加ssl的路径(

centos 6.5 启动时卡在进度条位置无法进入系统解决办法。

今天公司服务器因突然断电导致phddns 花生壳 启动失败,一直卡在启动进度条页面. 解决办法 1.按F5查看卡在什么位置, 2.查看解决方法:程序卡住的情况下,直接备份资料后,卸载程序重启就可以了. 3.进入到single单用户模式下,将程序删除就可以了. 进入single: 1.开机时按 'e' 键, 然后进入grub菜单. 2.选择要启动的版本,然后按 'e' 键 3.选择 带kernel的项,然后按 'e' 键,在后面添加 single,按回车 4.按 'b' 键.接下来系统就会进入一个

安装mysql 开启服务时出错/etc/init.d/mysqld: line 264: 的解决办法

安装mysql 开启服务时,出错/etc/init.d/mysqld: line 264: cd: mysql-5.5.60: No such file or directory解决办法https://blog.51cto.com/genxin/1783419 basedir 设置正确后,又出现,错误[[email protected] ~]# service mysqld startStarting MySQL.Logging to '/usr/local/mysql-5.5.60/local

linux 使用yum命令安装软件时出现HTTP Error 404 NOT FOUND错误的解决办法

在centos7 的环境下,使用yum install openssh-server 安装SSH时,在下载的过程中一直(软件安装包连接)提示HTTP error 404 NOT FOUND 错误: 将软件安装安装包连接网址复制到win下,可以正常访问下载: yum查找软件包依赖时使用的是过时的缓存,清空更新之后,再次安装软件,问题消失, 使用命令:yum clean all

视频会议时对方无法听清楚我的声音(解决办法)

视频会议时对方无法听清楚我的声音 首先分析问题:驱动和配置 1.驱动问题 先检查本机驱动是否是官网最新版,本地播放是否正常,如果不是去官网下载安装最新驱动,并测试麦克和音响是否正常 2.配置问题: 进入控制面板更改配置 选择"声音" 选择"录制","属性" 选择"高级",去掉"独占模式"和信号增强内的所有对勾.保存,测试即可.

Eclipse运行时发生An internal error occurred during:“**************” 的解决办法

原因分析: 当前工作目录下的 .project 文件 不一致 例如1: 南京大学 Mooctest 提交考试试卷时出现的:An internal error occurred during:“提交考试结果” 例如2:Eclipse启动时发生An internal error occurred during: "Initializing Java Tooling". 解决方案:删除当前工作目录下的WORKSPACE_HOME/.metadata/.plugins/org.eclipse.