• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-26) 31次浏览 已收录 0个评论

近日,由于项目需求
需要用到sleep函数定时从数据库取一堆数据出来去执行某些操作。
sleep等待的时间至少有一个小时以上
此前做过测试
/本文来源gao@!dai!ma.com搞$$代^@码5网@搞代gaodaima码用sleep函数去完成数小时后执行的操作是可行的

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

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

可为什么sleep()一个小时后不能读取信息呢?
为了测试方便我直接在sleep语句前读库一次,sleep后再读一次库
如:

<br /><?php<br />require_once('include.php');<br />// 读取数据库信息<br />$data = $db->getList();<br />print_r($data);<br /> <br />// 定时一个小时以后<br />sleep(3600);<br /> <br />// 再读取一次信息<br />$data = $db->getList();<br />print_r($data);<br /> <br />?>

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

于是再把sleep改成十秒钟后再测试一次

<br /><?php<br />require_once('include.php');<br />// 读取数据库信息<br />$data = $db->getList();<br />print_r($data);<br /> <br />// 定时十秒以后<br />sleep(10);<br /> <br />// 再读取一次信息<br />$data = $db->getList();<br />print_r($data);<br /> <br />?><br />

以上结果
两次读库成功

为何一个小时读库失败,十秒钟却读库成功呢??
我用的是单例数据库操作类
想起一个问题
会不会是数据库连接超时导致读库失败呢?
于是赶紧把此处读库操作改成现连

<br /><?php<br />require_once('include.php');<br />// 读取数据库信息<br />$data = getList();<br />print_r($data);<br /> <br />// 定时一个小时以后<br />sleep(3600);<br /> <br />// 再读取一次信息<br />$data = getList();<br />print_r($data);<br /> <br />// 读取数据库信息<br />function getList(){<br />        $pdo = new PDO('mysql:host=localhost;dbname=test','root','root');<br />        $result = $pdo->query('select * from tables');<br />        return $result->fetchAll(PDO::FETCH_ASSOC);<br />}<br />?>

测试成功!!
原来sleep会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中使用sleep造成mysql读取失败的案例和解决方法_php技巧

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址