PHP中使用sleep造成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会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!

(0)

相关推荐

  • PHP中利用sleep函数实现定时执行功能实现代码

    在一些竞猜的网站中,如果我们需要做一个定时执行的功能,比如有一道题,在十秒之内要完成,否则显示"您已超时",如果完成,则跳转到下一道题上面,而这中间有一个十秒的停顿,这样的功能是怎样实现的呢? 在PHP中,有一个sleep函数,大概意思是程序执行遇到sleep函数时暂停N秒后继续往下执行.如sleep(10)意思就是程序自上往下执行,遇到sleep(10)语句后暂停十秒,然后继续往下执行.函数括号内的参数是一个数值,代表暂停时间值,单位秒.请看下面一段代码: <?php // c

  • PHP sleep()函数, usleep()函数

    PHP sleep() 函数 定义和用法 sleep() 函数延迟代码执行若干秒. 语法sleep(seconds) seconds 必需.以秒计的暂停时间. 返回值 若成功,返回 0,否则返回 false. 错误/异常 如果指定的描述 seconds 是负数,该函数将生成一个 E_WARNING. 例子 <?php echo date('h:i:s') . "<br />"; //暂停 10 秒 sleep(10);//重新开始 echo date('h:i:s')

  • PHP中使用sleep函数实现定时任务实例分享

    在某些程序中,有一些特殊的功能需要用到定时执行,如果熟悉Linux的朋友肯定会说这不是容易吗,直接来个计划任务crontab不久实现了吗?这的确是可以实现,但必须是提前知道具体的执行时间,然后才能写到计划任务里去.比如凌晨两点,上午七点,或者每天上午六点三十分等等. 然而有时候,这个时间我们无法预知,而执行时间是程序动态生成的.然后在动态生成的时间后执行某些程序片段,这里就不能用Linux的crontab计划任务了,因为每次执行的时间都是动态生成,而计划任务需要知道一个定死了的时间.既然无法使用

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

    近日,由于项目需求 需要用到sleep函数定时从数据库取一堆数据出来去执行某些操作. sleep等待的时间至少有一个小时以上 此前做过测试 用sleep函数去完成数小时后执行的操作是可行的   可邪门的问题出来了 程序用sleep后发现不能从数据库取到相应的信息 把sleep去掉 结果正常   郁闷中... 难道sleep影响读库操作!!! 于是为了方便测试 直接来个sleep(10) 十秒后执行 结果能从数据库读取信息   可为什么sleep()一个小时后不能读取信息呢? 为了测试方便我直接在

  • MySQL安装失败的原因及解决步骤

    目录 失败的原因 步骤如下: 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 总结 失败的原因 1.如果你原先安装过MySQL,后来卸载了再安装失败了,有可能是卸载不干净. 需要手动目录删光所有MySQL相关的文件.这一点MySQL特别坑,吐槽一下.我都卸载完了,你为什么不给我删干净,还要我手动去删,而且还影响我下一次安装. Oracle简直太垃圾. 而且还要把注册表也自己删干净. 然后重新安装才可以,不然你就有可能80端口被占用. 步骤如下: 步骤一 确认你的mysql服务是关闭的状态,不然卸

  • OpenCV中C++函数imread读取图片的问题及解决方法

    今天在用OpenCV实验Image Pyramid的时候发现一个奇怪的问题,就是利用C++函数imread读取图片的时候返回的结果总是空,而利用C函数cvLoadImage时却能读取到图像.代码如下: //环境:VS2010 + OpenCV 2.3.1 #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <math.h> #include <stdlib.h>

  • gearman中worker常驻后台,导致MySQL server has gone away的解决方法

    本文实例讲述了gearman中worker常驻后台,导致MySQL server has gone away的解决方法.分享给大家供大家参考,具体如下: 产生这个原因主要有如下几点: 1.mysql服务宕机了 2.长时间没有操作,超过了wait_timeout的设置,mysql自动断开 3.mysql请求链接被主动kill 4.发送的请求或返回结果过大,可设置max_allowed_packet的值 5.程序中你都是通过单例来操作数据库,如果两个操作时间超过wait_timeout. 为了演示的

  • MacOS中 VSCode 安装 GO 插件失败问题的快速解决方法

    问题重现 Installing golang.org/x/tools/cmd/guru FAILED Installing golang.org/x/tools/cmd/gorename FAILED Installing golang.org/x/lint/golint FAILED Installing github.com/stamblerre/gocode FAILED 4 tools failed to install. VS COde 打开 .go 文件会自动安装插件,但是出现了一些

  • SpringBoot 配置文件中配置的中文,程序读取出来是乱码的解决

    配置文件中是正常显示的中文,但是spring读取到的确是乱码. 我总共有两种解决办法, 第一种方法: 先复制或者备份一下你的配置文件的所有字符,打开设置将transparent native-to-ascii conversion选中,然后返回将之前的配置文件重新粘贴一遍(一定要将中文重新打一遍)如图: Transparent native-to-ascii conversion的意思是:自动转换ASCII编码. 他的工作原理是:在文件中输入文字时他会自动的转换为Unicode编码,然后在ide

  • IDEA连接mysql报错的问题及解决方法

    IDEA连接mysql报错了! 本人之前使用MySQL以及后续使用mybatis和mybatisPlus都是使用sqlyog或者navicat,今天重新学习sql,看到up使用了,idea插件来连接数据库(mysql)也来学习使用了,结果出现一系类问题.本博客开始记录. ---------------------------前进的道路充满荆棘.--------------------------------------------------------------------------- 错

  • weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法

    目录 1.mysql服务搭建 2.weblogic控制台建立数据源并测试 问题处理1 原因: 解决: 查看权限以及身份验证机制命令: 问题处理2 原因: 解决: WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发.集成.部署和

  • AngularJS中update两次出现$promise属性无法识别的解决方法

    前言 本文主要介绍的是在AngularJS中update两次出现$promise属性无法识别的解决方法,下面话不多说,先来看看错误提示,然后再看看解决的办法吧. 一.错误信息如下: ERROR 2015-12-02 14:33:17,653 http-bio-8080-exec-42 o.s.s.r.i.e.InternalErrorExceptionMapper - Unrecognized field "$promise" (class com.inetpsa.fnd.rest.c

  • AngularJS使用ng-inlude指令加载页面失败的原因与解决方法

    本文实例讲述了AngularJS使用ng-inlude指令加载页面失败的原因与解决方法.分享给大家供大家参考,具体如下: AngularJS中提供的ng-include指令,很类似于JSP中的<jsp:include>用来将多个子页面合并到同一个父页面中,避免父页面过大,可读性差,不好维护. 父页面parent.html代码如下: <html> <head> <script src="angular-1.2.2/angular.js">&

随机推荐