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

yipeiwu_com6年前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+MYSQL会员系统的开发实例教程

本文通过一个简单的实例完成了完整的PHP+MySQL会员系统功能。是非常实用的一个应用。具体实现步骤如下: 一、会员系统的原理:     登陆-->判断--&g...

用mysql触发器自动更新memcache的实现代码

mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的...

php+mysql查询优化简单实例

本文实例分析了php+mysql查询优化的方法。分享给大家供大家参考。具体分析如下: PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Ap...

你应该知道的PHP+MySQL分页那点事

你应该知道的PHP+MySQL分页那点事

俗话有云“工欲善其事,必先利其器”,我们今天要使用PHP来实现分页。那么我们首要的任务就是搭建PHP的工作环境。 环境准备 使用PHP技术,最好的搭档就是AMP(Apache,MySQL...

脚本安全的本质_PHP+MYSQL第1/3页

一 前言 问题的存在 从代码级别上,也就是应用层次上考虑代码安全的话(也就是不考虑底层的语言本身等问题的漏洞),脚本安全问题就是函数和变量的问题。变量直接或者间接的接收用户不安全的的输入...