我有一个while循环从数据库表中选择行,并在while循环中打印这些数据:
print $result2["forename"].' '. $result2["surname"].' ('.$result2["email"].')<br><hr />';
但它需要花费很长时间来加载页面,然后一次显示大量的行。如何从数据库加载数据时,如何逐行显示它?
答案 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 />';
?>