您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關在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會導致單例類超時問題從而出現執行時間過長以后數據庫連接可能斷開問題,也就不能讀到數據庫信息!
看完上述內容,你們對在PHP中利用sleep無法對mysql進行讀取如何解決有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。