PHP中使用sleep造成mysql读取失败的案例和解决方法
php  /  管理员 发布于 7年前   168
近日,由于项目需求
需要用到sleep函数定时从数据库取一堆数据出来去执行某些操作。
sleep等待的时间至少有一个小时以上
此前做过测试
用sleep函数去完成数小时后执行的操作是可行的
可邪门的问题出来了
程序用sleep后发现不能从数据库取到相应的信息
把sleep去掉
结果正常
郁闷中。。。
难道sleep影响读库操作!!!
于是为了方便测试
直接来个sleep(10) 十秒后执行
结果能从数据库读取信息
可为什么sleep()一个小时后不能读取信息呢?
为了测试方便我直接在sleep语句前读库一次,sleep后再读一次库
如:
require_once('include.php');
// 读取数据库信息
$data = $db->getList();
print_r($data);
// 定时一个小时以后
sleep(3600);
// 再读取一次信息
$data = $db->getList();
print_r($data);
?>
结果发现
第一次读库成功
第二次读库为空
于是再把sleep改成十秒钟后再测试一次
复制代码 代码如下:
require_once('include.php');
// 读取数据库信息
$data = $db->getList();
print_r($data);
// 定时十秒以后
sleep(10);
// 再读取一次信息
$data = $db->getList();
print_r($data);
?>
以上结果
两次读库成功
为何一个小时读库失败,十秒钟却读库成功呢??
我用的是单例数据库操作类
想起一个问题
会不会是数据库连接超时导致读库失败呢?
于是赶紧把此处读库操作改成现连
复制代码 代码如下:
require_once('include.php');
// 读取数据库信息
$data = getList();
print_r($data);
// 定时一个小时以后
sleep(3600);
// 再读取一次信息
$data = getList();
print_r($data);
// 读取数据库信息
function getList(){
$pdo = new PDO('mysql:host=localhost;dbname=test','root','root');
$result = $pdo->query('select * from tables');
return $result->fetchAll(PDO::FETCH_ASSOC);
}
?>
测试成功!!
原来sleep会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!您可能感兴趣的文章:
上一条:
个人写的PHP验证码生成类分享
下一条:
PHP面向对象程序设计之类常量用法实例
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号