PHP While循环 - 从表中逐行打印数据

时间:2013-09-17 10:43:50

标签: php mysql

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

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

但它需要花费很长时间来加载页面,然后一次显示大量的行。如何从数据库加载数据时,如何逐行显示它?

3 个答案:

答案 0 :(得分:1)

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

如果您遇到性能问题,可以考虑改为调整查询,或者限制返回的记录数。

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

答案 1 :(得分: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);
}

以前发送标头似乎很重要。没有它在我的localhost上没有工作。 根据{{​​1}}文档,同时使用flush()ob_flush()也是个好主意。

如果仍然无效

PHP文档说:

  

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

答案 2 :(得分: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 />';

?>