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

yipeiwu_com5年前Mysql基础

近日,由于项目需求
需要用到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封装mysqli基于面向对象的mysql数据库操作类与用法示例

本文实例讲述了PHP封装mysqli基于面向对象的mysql数据库操作与用法。分享给大家供大家参考,具体如下: 首先封装好mysql类 mysql.php <?php...

mysql_num_rows VS COUNT 效率问题分析

mysql_num_rows 和 count( * ) 都能统计总数,那个能好一点呢? 或者 分别什么时候用num_rows 和 count( * )呢 一个直观的对比 测试数据: 条数...

详解PHP安装mysql.so扩展的方法

前言 因为在PHP中mysql_connect模块已经逐渐被弃用,我在搭建环境时也没有再安装mysql扩展,但是今天在维护一个老项目时,出现报错 Fatal error: Uncaugh...

php+mysql+jquery实现日历签到功能

php+mysql+jquery实现日历签到功能

在网站开发过程中我们会经常用到签到功能来奖励用户积分,或者做一些其他活动。这次项目开发过程中做了日历签到,因为没有经验所有走了很多弯路,再次记录过程和步骤。 1.日历签到样式: 2.本...

PHP查询MySQL大量数据的时候内存占用分析

昨天, 有同事在PHP讨论群里提到, 他做的一个项目由于MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用. 所以, 他问, 在执行下面的代码遍历返回的MySQL结果...