我有一个12000种产品的数据库。我有一个查询,它将在一个页面上显示大约3000个产品,它需要一段时间才能显示。但是,数据会在整个查询或循环结束后显示。有没有办法在拉取结果时显示每个结果?下面是我的代码。
$result = mysql_query("SELECT title, model, description FROM products WHERE price > 500");
while($row = mysql_fetch_array($result)):
...
endwhile;任何帮助都是非常感谢的。谢谢
发布于 2013-03-27 22:25:03
mysql扩展已被弃用,最好切换到mysqli或pdo。但是,由于这是一个相同的问题,不管是什么接口/模块,我们现在还是使用mysql_*吧……
当调用mysql_query(...)时,该函数仅在将完整的结果集从MySQL服务器传输到php进程的内存中之后才返回。
请改用mysql_unbuffered_query(...):
<?php
$result = mysql_unbuffered_query("SELECT title, model, description FROM products WHERE price > 500");
while($row = mysql_fetch_array($result)):
...
// output
// maybe flush() or ob_flush() here...
endwhile;其中的差异解释在
您还必须牢记潜在的输出缓冲区:http://docs.php.net/flush和http://docs.php.net/ob_flush
对于html客户端/浏览器,您必须将部分数据放入一个结构中,该结构可以在发送所有数据之前呈现。因此,例如,不固定的表最有可能是次优的。例如,参见https://en.wikipedia.org/wiki/Incremental_rendering
发布于 2013-03-27 22:22:26
发布于 2013-03-27 22:28:28
有许多变量可以实现这样的效果。
首先,php设置应该允许你使用输出缓冲(看看output_buffering参数,也许还有implicit_flush)。在此之后,您可能应该使用flush()和/或ob_flush()
你应该考虑的另一件事是,浏览器本身并不总是允许你使用输出缓冲,这就是众所周知的“问题”。
对于查询本身,您可能想尝试使用mysql_unbuffered_query (或更好的MySQLi/PDO等效项)。
总而言之,在我看来,实现这种效果的最好方法是使用ajax数据轮询。
https://stackoverflow.com/questions/15661222
复制相似问题