加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP中使用sleep造成mysql读取失败的案例和解决方法

发布时间:2020-05-24 07:22:14 所属栏目:PHP 来源:互联网
导读:这篇文章主要介绍了PHP中使用sleep造成mysql读取失败的案例和解决方法,如果遇到这个问题,可能会耗费你N久的时间,希望你能快速的搜索到这篇文章吧,需要的朋友可以参考下

近日,由于项目需求 需要用到sleep函数定时从数据库取一堆数据出来去执行某些操作。 sleep等待的时间至少有一个小时以上 此前做过测试 用sleep函数去完成数小时后执行的操作是可行的

可邪门的问题出来了
程序用sleep后发现不能从数据库取到相应的信息
把sleep去掉
结果正常

郁闷中。。。
难道sleep影响读库操作!!!
于是为了方便测试
直接来个sleep(10) 十秒后执行
结果能从数据库读取信息

可为什么sleep()一个小时后不能读取信息呢?
为了测试方便我直接在sleep语句前读库一次,sleep后再读一次库
如:
<div class="codetitle"><a style="CURSOR: pointer" data="13859" class="copybut" id="copybut13859" onclick="doCopy('code13859')"> 代码如下:<div class="codebody" id="code13859">
<?php
require_once('include.php');
// 读取数据库信息
$data = $db->getList();
print_r($data);

// 定时一个小时以后
sleep(3600);

// 再读取一次信息
$data = $db->getList();
print_r($data);

?>
结果发现
第一次读库成功
第二次读库为空

于是再把sleep改成十秒钟后再测试一次
<div class="codetitle"><a style="CURSOR: pointer" data="5573" class="copybut" id="copybut5573" onclick="doCopy('code5573')"> 代码如下:<div class="codebody" id="code5573">
<?php
require_once('include.php');
// 读取数据库信息
$data = $db->getList();
print_r($data);

// 定时十秒以后
sleep(10);

// 再读取一次信息
$data = $db->getList();
print_r($data);

?>

以上结果 两次读库成功

为何一个小时读库失败,十秒钟却读库成功呢??
我用的是单例数据库操作类
想起一个问题
会不会是数据库连接超时导致读库失败呢?
于是赶紧把此处读库操作改成现连
<div class="codetitle"><a style="CURSOR: pointer" data="83546" class="copybut" id="copybut83546" onclick="doCopy('code83546')"> 代码如下:<div class="codebody" id="code83546">
<?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会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读