解决PHP使用sleep造成MySQL读取失败的问题

内容摘要
这篇文章主要为大家详细介绍了解决PHP使用sleep造成MySQL读取失败的问题,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
近日,由
文章正文

这篇文章主要为大家详细介绍了解决PHP使用sleep造成MySQL读取失败的问题,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!

近日,由于项目需求需要用到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会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!

注:关于解决PHP使用sleep造成MySQL读取失败的问题的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!