PHP中使用sleep造成mysql读取失败的案例和解决方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-04-07 15:57:21 浏览: 评论:0
这篇文章主要介绍了PHP中使用sleep造成mysql读取失败的案例和解决方法,如果遇到这个问题,可能会耗费你N久的时间,希望你能快速的搜索到这篇文章吧,需要的朋友可以参考下
近日,由于项目需求
需要用到sleep函数定时从数据库取一堆数据出来去执行某些操作。
sleep等待的时间至少有一个小时以上
此前做过测试
用sleep函数去完成数小时后执行的操作是可行的
可邪门的问题出来了
程序用sleep后发现不能从数据库取到相应的信息
把sleep去掉
结果正常
郁闷中。。。
难道sleep影响读库操作!!!
于是为了方便测试
直接来个sleep(10) 十秒后执行
结果能从数据库读取信息
可为什么sleep()一个小时后不能读取信息呢?
为了测试方便我直接在sleep语句前读库一次,sleep后再读一次库
如:
- <?php
- require_once('include.php');
- // 读取数据库信息
- $data = $db->getList();
- print_r($data);
- // 定时一个小时以后
- sleep(3600);
- // 再读取一次信息
- $data = $db->getList();
- print_r($data);
- ?>
结果发现
第一次读库成功
第二次读库为空
于是再把sleep改成十秒钟后再测试一次
代码如下:
- <?php
- require_once('include.php');
- // 读取数据库信息
- $data = $db->getList();
- print_r($data);
- // 定时十秒以后
- sleep(10);
- // 再读取一次信息
- $data = $db->getList();
- print_r($data);
- ?>
以上结果
两次读库成功
为何一个小时读库失败,十秒钟却读库成功呢??
我用的是单例数据库操作类
想起一个问题
会不会是数据库连接超时导致读库失败呢?
于是赶紧把此处读库操作改成现连,代码如下:
- <?php
- 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会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!
Tags: sleep mysql读取失败
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)