美文网首页程序员
PHP执行数据库操作,自动刷新页面,防止网页超时

PHP执行数据库操作,自动刷新页面,防止网页超时

作者: 魔力小小鸟 | 来源:发表于2016-06-06 16:18 被阅读1039次

    说明:

    对数据库进行初始化或修改等操作时:
    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 = <<<SQL
    SELECT col_num, col_id
    FROM table_name
    ORDER by col_id
    LIMIT {$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 .= <<<SQL
    SET 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;
    }
    ?>
    

    相关文章

      网友评论

        本文标题:PHP执行数据库操作,自动刷新页面,防止网页超时

        本文链接:https://www.haomeiwen.com/subject/zexddttx.html