|
近日,由于項(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ù)操作!!!
于是為了方便測(cè)試
直接來(lái)個(gè)sleep(10) 十秒后執(zhí)行
結(jié)果能從數(shù)據(jù)庫(kù)讀取信息
可為什么sleep()一個(gè)小時(shí)后不能讀取信息呢?
為了測(cè)試方便我直接在sleep語(yǔ)句前讀庫(kù)一次,sleep后再讀一次庫(kù)
如:
復(fù)制代碼 代碼如下:
<?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è)試一次
復(fù)制代碼 代碼如下:
<?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ù)操作類
想起一個(gè)問(wèn)題
會(huì)不會(huì)是數(shù)據(jù)庫(kù)連接超時(shí)導(dǎo)致讀庫(kù)失敗呢?
于是趕緊把此處讀庫(kù)操作改成現(xiàn)連
復(fù)制代碼 代碼如下:
<?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)致單例類超時(shí)問(wèn)題從而出現(xiàn)執(zhí)行時(shí)間過(guò)長(zhǎng)以后數(shù)據(jù)庫(kù)連接可能斷開(kāi)問(wèn)題,也就不能讀到數(shù)據(jù)庫(kù)信息!
php技術(shù):PHP中使用sleep造成mysql讀取失敗的案例和解決方法,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。