当前位置:首页 > PHP > 正文内容

PHP高并发下数据库值更新的问题

高老师8年前 (2017-08-04)PHP2303

(1).创建数据库test ,创建表shop(字段id,total),商品id是1,商品总数10

    QQ图片20170804220651.png

(2).PHP模拟购买,商品数量大于0才能购买

<?php
//连接数据库
$con=mysqli_connect("192.168.2.186","root","root","test");

//查询商品数量是否大于0
$res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1'));

if($res['total']>0){
	mysqli_query($con,'UPDATE shop SET total=total-1  WHERE id=1');
	
}
unset($res);
mysqli_close($con);
?>

(3).ab.exe进行高并发测试

 ab -n 500 -c 500  http://test.cn/

(4).数据库结果:

    QQ图片20170804220550.png

   高并发下这样完全不行

(5).我们可以使用where条件来处理,更新的时候加上where条件即可,更新的时候更新失败说明库存已经不足

<?php
//连接数据库
$con=mysqli_connect("192.168.2.186","root","root","test");

//查询商品数量是否大于0
$res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1'));

if($res['total']>0){
	mysqli_query($con,'UPDATE shop SET total=total-1  WHERE id=1 and total>0');
	
}
unset($res);
mysqli_close($con);
?>

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/39.html

分享给朋友:

“PHP高并发下数据库值更新的问题” 的相关文章

PHP对象转数组

PHP对象转数组

function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...

php数组合并 array_merge和+号的区别

php数组合并 array_merge和+号的区别

array_merge是最常用的数组合并方法,+号同样也可以,但是却有很大不同。array_merge遇到相同字符串key,后面数组的key会覆盖前面数组的key,+号正好相反。$a = [ 'one' => 'A on...

php arrayaccess的应用场景:配置管理器

php arrayaccess的应用场景:配置管理器

上篇文章已经讲解arrayacces的原理,现在来讲解下arrayaccess的实际应用。一个大型的互联网项目中必然会存在各种配置信息,例如多种数据库信息:mysql,tidb,mongodb,redis,某个业务模块单独的配置信息如比例,额度等等,那么该如何治理配置信息?PHP项目中大部分的框架都...

windows安装php event扩展问题

windows安装php event扩展问题

php event扩展在windows中依赖于php_sockets扩展,因此在php.ini中必须先加载php sockets扩展,如下。extension=sockets extension=event...

thinkphp3定时任务,tp定时任务,thinkphp定时任务

thinkphp3定时任务,tp定时任务,thinkphp定时任务

本教程使用的定时任务基于EasyTak,EasyTask官方文档:https://gitee.com/392223903/EasyTask由于tp3.2.x官方开发未考虑命令行支持和绝对路径开发的标准,因此我编写了一个支持的类来运行。1.在tp3.2.3根目录下安装easytaskcomposer&...

php curl Received HTTP code 403 from proxy after CONNECT

php curl Received HTTP code 403 from proxy after CONNECT

在调用微信code换openid的接口curl报错curl Received HTTP code 403 from proxy after CONNECT,错误码56。可以看到是curl的代理有问题。然后我自己电脑设置代理去访问curl请求的地址,的确也返回了403,说明代理不允许访问这个地址,联系...