0

我有一个while循环从数据库表中选择行,它在while循环中打印这些数据:

print $result2["forename"].' '. $result2["surname"].' ('.$result2["email"].')<br><hr />';

但是它需要很长时间才能加载页面然后一次显示大量行。当它从数据库加载数据时,如何让它逐行显示?

4

3 回答 3

1

PHP 在服务器上运行并逐行输出数据,但在脚本完成处理之前它不会向用户发送任何内容。

如果您遇到性能问题,您可能会考虑尝试调整查询,或限制返回的记录数。

一个常见的技巧是使用分页来选择一堆行,快速显示它们,然后在需要时重新查询数据库以获取下一行。通常,这允许更小的占用空间,用户可以选择是否要实际查看其他结果。

于 2013-09-17T10:45:20.193 回答
0

要在整个 PHP 脚本执行之前发送缓冲数据,您可以使用flush()函数。但请仔细阅读文档,因为它可能不适用于所有环境。

工作示例:

<?php
header("Content-type: text/html; charset=utf-8");
for ($i = 1; $i <= 10; $i++) {
    print ($i . '<br>');
    flush();
    ob_flush();
    sleep(1);
}

之前发送标头似乎很重要。在我的本地主机上没有它就无法工作。flush()此外,ob_flush()根据flush()文档使用两者也是一个好主意。

如果还是不行

PHP 文档说:

Apache 的服务器模块(如 mod_gzip)可能会自己进行缓冲,这将导致 flush() 不会导致数据立即发送到客户端。

于 2013-09-17T10:49:32.477 回答
0

试试喜欢

page1.php

<script>
var page=1;
var doRequest = function() {
    $.ajax({
        type:"POST",
        url:"page2.php",
        data:{page:page},
        success: function(response) {
            $("#container").append(response);
            page++;
            doRequest();
        }
    });
}

doRequest();
</script>

<div id='container'>

</div>

page2.php

<?php
$page = $_POST["page"];
$rowsPerRequest = 20;
$offset = ($page - 1) * $rowsPerRequest;

$sql = "SELECT * FROM table LIMIT $offset, $rowsPerRequest";
....
....
print $result2["forename"].' '. $result2["surname"].' ('.$result2["email"].')<br><hr />';

?>
于 2013-09-17T11:07:01.627 回答