• php处理数据库数据,每处理一个数据返回客户端显示当前状态的方法。


    php处理大量数据,每处理一个数据返回客户端显示当前状态的方法。

    类似于dedecms生成静态页

    想法:

    1. 客户端发送请求
    2. 服务器端接受请求,开始统计所需处理的数据量
    3. 将所需处理数据按一定规则排列,发送到服务器处理端
    4. 服务器处理端处理了第一个数据,将处理结果经过一定处理后发送给客户端
    5. 客户端接收到结果,自动将处理结果显示并发送到服务器
    6. 服务器接收到处理结果 将它转发到服务器处理端
    7. 处理端继续处理结果...
    8. 循环4-7步骤,直到处理完毕

    实验过程:

    1.创建数据库和表

    create databases handle;
    
    create table user(
    
    id int unsigned not null auto_increment primary key,
    
    name varchar(8),
    
    sex tinyint(1) default '1',
    
    score int not null,
    
    state tinyint(1)
    
    );

    2.向表中添加数据(不示例)

    3.创建index.html客户端,a.php服务端1,b.php服务端2

    Index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>客户端</title>
    </head>
    <body>
        
        <button onclick="send('a.php?state=0')">开始请求</button>
    
        <div style="position: fixed; 500px;height: 300px;top: 100px;background: gray">
            <span style="color: white;font-size: 20px;"></span>
        </div>
        <script type="text/javascript" src="./jquery-1.10.2.min.js"></script>
        <script type="text/javascript">
    //创建一个模态框
    function display(value){
        $('span').html(value);
    }
    
    
    //ajax
    function send(dizhi){
        $.ajax({
           type: "get",
           url: dizhi,
           success: function(msg){
                   var arr=JSON.parse(msg);
                   console.log(arr);
                   
                //alert(arr.value);
                var tishi="已经处理 "+arr.now +"个,共"+arr.all+"";
                display(tishi);
    
                if(arr.now!=arr.all){
                    send("a.php?now="+arr.now+"&all="+arr.all);
                }else{
                    alert("完成!");
                }
           }
        });
    }
        </script>
    </body>
    </html>

    a.php:

    <?php
        require('./dbconfig.php');
        $link=mysql_connect(HOST,USER,PASS) or die('数据库链接失败');
        mysql_select_db(DBNAME);
    /*
    查询数据
        $sql="select * from user";
        $result=mysql_query($sql);
        $row=mysql_fetch_assoc($result);
        var_dump($row);
    */
    /*
    循环插入
    for($i=3;$i<=100;$i++){
        $sql= "insert into user(name,score,state) values('z".$i."',".$i.",1)";
        mysql_query($sql);
    }
    */
    
    /*查询需要处理的数据总数*/
    //isset($_GET['state'])?$_GET['state']:0;
    
    if(isset($_GET['state'])){
        $sql="select count(*) from user";
        $result=mysql_query($sql);
        $all=mysql_result($result,0);
        $now=0;
        header("Location: b.php?all={$all}&now=0");
    }else{
        header("Location: b.php?all={$_GET['all']}&now={$_GET['now']}");
    }
    
    /*返回当前处理的数据*/

    b.php:

    <?php
        require('./dbconfig.php');
        $link=mysql_connect(HOST,USER,PASS) or die('数据库链接失败');
        mysql_select_db(DBNAME);
    
    
    /*返回当前处理的数据*/
    //$id=$_GET['id'];//获取将要处理的id
        $now=$_GET['now'];//已经处理的个数
        $all=$_GET['all'];//总共要处理的个数
    
        $sql="select score from user limit {$now},1";
        $result=mysql_query($sql);
        $value=mysql_result($result, 0);
        $now++;
        $arr=array(
            'now'=>$now,
            'all'=>$all,
            'value'=>$value
        );
    
    //print_r($arr);
        echo json_encode($arr);

    dbconfig.php:

    <?php
    	define('HOST','127.0.0.1');
    	define('USER', 'root');
    	define('PASS','root');
    	define('DBNAME','handle');
    

    以上是全部~

  • 相关阅读:
    关于http与https之间的区别
    成功解决react+webpack打包文件过大的问题(时间已久,不建议继续阅读)
    使用angularjs实现注册表单
    在jQuery中使用canvas时遇到的问题
    使用canvas实现绚丽的时钟特效
    HTML5中的DOM新特性
    JavaScript中DOM节点层次Text类型
    wx小程序 createRewardedVideoAd
    移动端项目构建 [笔记]
    wx 小程序 | textarea +
  • 原文地址:https://www.cnblogs.com/zjhblogs/p/5190705.html
Copyright © 2020-2023  润新知