PHP中使用sleep造成mysql讀取失敗的案例和解決方法
近日,由于項(xiàng)目需求
需要用到sleep函數(shù)定時(shí)從數(shù)據(jù)庫(kù)取一堆數(shù)據(jù)出來(lái)去執(zhí)行某些操作。
sleep等待的時(shí)間至少有一個(gè)小時(shí)以上
此前做過(guò)測(cè)試
用sleep函數(shù)去完成數(shù)小時(shí)后執(zhí)行的操作是可行的
可邪門(mén)的問(wèn)題出來(lái)了
程序用sleep后發(fā)現(xiàn)不能從數(shù)據(jù)庫(kù)取到相應(yīng)的信息
把sleep去掉
結(jié)果正常
郁悶中。。。
難道sleep影響讀庫(kù)操作?。。?br />
于是為了方便測(cè)試
直接來(lái)個(gè)sleep(10) 十秒后執(zhí)行
結(jié)果能從數(shù)據(jù)庫(kù)讀取信息
可為什么sleep()一個(gè)小時(shí)后不能讀取信息呢?
為了測(cè)試方便我直接在sleep語(yǔ)句前讀庫(kù)一次,sleep后再讀一次庫(kù)
如:
<?php
require_once('include.php');
// 讀取數(shù)據(jù)庫(kù)信息
$data = $db->getList();
print_r($data);
// 定時(shí)一個(gè)小時(shí)以后
sleep(3600);
// 再讀取一次信息
$data = $db->getList();
print_r($data);
?>
結(jié)果發(fā)現(xiàn)
第一次讀庫(kù)成功
第二次讀庫(kù)為空
于是再把sleep改成十秒鐘后再測(cè)試一次
<?php
require_once('include.php');
// 讀取數(shù)據(jù)庫(kù)信息
$data = $db->getList();
print_r($data);
// 定時(shí)十秒以后
sleep(10);
// 再讀取一次信息
$data = $db->getList();
print_r($data);
?>
以上結(jié)果
兩次讀庫(kù)成功
為何一個(gè)小時(shí)讀庫(kù)失敗,十秒鐘卻讀庫(kù)成功呢??
我用的是單例數(shù)據(jù)庫(kù)操作類(lèi)
想起一個(gè)問(wèn)題
會(huì)不會(huì)是數(shù)據(jù)庫(kù)連接超時(shí)導(dǎo)致讀庫(kù)失敗呢?
于是趕緊把此處讀庫(kù)操作改成現(xiàn)連
<?php
require_once('include.php');
// 讀取數(shù)據(jù)庫(kù)信息
$data = getList();
print_r($data);
// 定時(shí)一個(gè)小時(shí)以后
sleep(3600);
// 再讀取一次信息
$data = getList();
print_r($data);
// 讀取數(shù)據(jù)庫(kù)信息
function getList(){
$pdo = new PDO('mysql:host=localhost;dbname=test','root','root');
$result = $pdo->query('select * from tables');
return $result->fetchAll(PDO::FETCH_ASSOC);
}
?>
測(cè)試成功!!
原來(lái)sleep會(huì)導(dǎo)致單例類(lèi)超時(shí)問(wèn)題從而出現(xiàn)執(zhí)行時(shí)間過(guò)長(zhǎng)以后數(shù)據(jù)庫(kù)連接可能斷開(kāi)問(wèn)題,也就不能讀到數(shù)據(jù)庫(kù)信息!
相關(guān)文章
PHP動(dòng)態(tài)創(chuàng)建Web站點(diǎn)的方法
在這一篇中我寫(xiě)了一些動(dòng)態(tài)創(chuàng)建Web站點(diǎn)的一些內(nèi)容,例如黏性表單、發(fā)送電子郵件、日期函數(shù)等。希望能對(duì)大家有所幫助,別忘了好評(píng)哦。2011-08-08Linux系統(tǒng)下使用XHProf和XHGui分析PHP運(yùn)行性能
這篇文章主要介紹了Linux系統(tǒng)下使用XHProf和XHGui分析PHP運(yùn)行性能的方法,該方案支持Apache與Nginx服務(wù)器及多種數(shù)據(jù)庫(kù)環(huán)境,需要的朋友可以參考下2015-12-12php常用經(jīng)典函數(shù)集錦【數(shù)組、字符串、棧、隊(duì)列、排序等】
這篇文章主要介紹了php常用經(jīng)典函數(shù),總結(jié)分析了php數(shù)組、字符串、棧、隊(duì)列、排序等相關(guān)函數(shù)功能與使用技巧,需要的朋友可以參考下2019-08-08對(duì)squid中refresh_pattern的一些理解和建議
用于確定一個(gè)頁(yè)面進(jìn)入cache后,它在cache中停留的時(shí)間。refresh_pattern規(guī)則僅僅應(yīng)用到?jīng)]有明確過(guò)時(shí)期限的響應(yīng)。原始服務(wù)器能使用Expires頭部,或者Cache-Control:max-age指令來(lái)指定過(guò)時(shí)期限。2009-04-04php MsSql server時(shí)遇到的中文編碼問(wèn)題
朋友要用sugarcrm的php讀取Ms sql server的中文資料,因?yàn)槠湓假Y料是Access 數(shù)據(jù)庫(kù),導(dǎo)到mysql不太方便。2009-06-06Session保存到數(shù)據(jù)庫(kù)的php類(lèi)分享
Session保存到數(shù)據(jù)庫(kù)的php類(lèi),需要的朋友可以參考下。2011-10-10