PHP如何進行資料庫操作以及防止頁面逾時和自動重新整理頁面講解

來源:互聯網
上載者:User
在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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.