PHP中使用sleep造成mysql讀取失敗的案例和解決方案,sleepmysql_PHP教程

來源:互聯網
上載者:User

PHP中使用sleep造成mysql讀取失敗的案例和解決方案,sleepmysql


近日,由於項目需求
需要用到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失敗?

應該是有些特殊字元沒處理,你用addslashes()轉換一下。
如果實在不行,就用base64_encode()加密一下再存。
用的時候取出來用base64_decode()解密就行了。
 

對於php讀取mysql的問題

sql語句這樣寫select name for 表名 where...
然後讀取第0個

或者你可以用函數
mysql_fetch_array

例子 2. mysql_fetch_array 使用 MYSQL_NUM

mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("ID: %s Name: %s", $row[0], $row[1]);
}

mysql_free_result($result);
?>

例子 3. mysql_fetch_array 使用 MYSQL_ASSOC

mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("ID: %s Name: %s", $row["id"], $row["name"]);
}

mysql_free_result($result);
?>

例子 4. mysql_fetch_array 使用 MYSQL_BOTH

mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Name: %s",......餘下全文>>
 

http://www.bkjia.com/PHPjc/867253.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/867253.htmlTechArticlePHP中使用sleep造成mysql讀取失敗的案例和解決方案,sleepmysql 近日,由於項目需求 需要用到sleep函數定時從資料庫取一堆資料出來去執行某些...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.