在PHP開發中對資料庫進行操作是非常常見的,我們在一個頁面停留長時間不操作會有提示或報錯等情況相信大家也都遇到過,那麼今天我們就來講一下如何對資料庫進行操作以及防止頁面逾時吧!
說明:
對資料庫進行初始化或修改等操作時:
1、簡單的直接使用sql陳述式完成。
2、稍微複雜點,可以通過執行php代碼來完成(讀資料再寫/修改資料)。
使用php代碼的時候(非命令列),我們可能會遇到網頁逾時的情況,解決方案一般有三種:
1、設定php.ini:
max_execution_time
2、代碼中添加:
set_time_limit(0); //0表示不逾時
3、頁面自動重新整理,將整個工作分批完成:
頁面可以隨著執行的過程變化,比如動態地告訴使用者執行到多少了,而不是單頁面的等待。
下面,主要整理了一下第三種方式。
頁面自動重新整理:
頁面重新整理<==>頁面跳轉,當某個條件成立時停止跳轉。
頁面跳轉:輸出meta標籤來實現
if ($flag) { //跳轉頁面,xxx為該php檔案的檔案名稱 echo '<meta http-equiv="refresh" content="0;url=xxx.php?">';} else { //重新整理停止}
重新整理同時傳遞參數,控制資料庫操作:
在meta的url中,我們可以使用Get的方式來傳遞一個參數。
這個參數可以用來變化SQL語句的limit,實現每次執行一部分的功能。
$page = isset($_GET['page']) ? $_GET['page'] : 0;//用$page構造sql語句或其它功能//資料庫操作或其它功能//設定$flag$flag = $pdostatement->rowCount() == 0; //比如資料庫影響行數//決定 跳轉重新整理 或 停止if ($flag) { //跳轉頁面,xxx為該php檔案的檔案名稱 echo '<meta http-equiv="refresh" content="0;url=xxx.php?page=' . ++$page . '">';} else { //重新整理停止}
假設,對某欄位資料+1,具體實現:
現在對SQL還不是很熟悉。
如果只是limit限制,可能會出現:已被查詢過的資料 再次被查詢出來 執行第二遍的情況?
個人覺得,最好加上主鍵的order by
<meta charset="UTF-8"><?php$page = isset($_GET['page']) ? $_GET['page'] : 0;$step = 50; //每次重新整理更新 50條資料$limit_start = $page * 50;$dsn = "mysql:host=localhost;dbname=db_name";try { $pdo = new PDO($dsn, "root", "123456"); $sql = <<<SQLSELECT col_num, col_idFROM table_nameORDER by col_idLIMIT {$limit_start},{$step}SQL; $pdostatement = $pdo->prepare($sql); $pdostatement->execute(); $pdostatement->setFetchMode(PDO::FETCH_NUM); $num = $pdostatement->rowCount(); if ($num == 0) { echo "sql執行完畢"; } else { echo "正在執行sql<br>"; $sql_update = "UPDATE table_name "; while (list($col_num, $col_id) = $pdostatement->fetch(PDO::FETCH_NUM)) { $col_name++; $sql_update .= <<<SQLSET col_name = "{$col_num}"WHERE col_id = "{$col_id}" , SQL; } $sql_update = substr($sql_update, 0, -1); //去掉最後的逗號 $pdostatement_update = $pdo->prepare($sql_update); $pdostatement_update->execute(); $num_update = $pdostatement_update->rowCount(); if ($num_update == 0) { echo $gfc_id . "修改出錯,停止更新"; } else { echo '<meta http-equiv="refresh" content="0;url=jianshu.php?page=' . (++$page) . '">'; } }} catch (PDOException $e) { echo "資料庫連接失敗" . $e->getMessage(); //串連失敗,擷取錯誤資訊 exit;}