我正在尝试使用php中的for循环将行插入MySQL数据库。我想要的是在完成操作时回显正在插入的特定行名。我尝试了冲洗方法,但没有成功,甚至没有ob_flush。
然后,我在这里搜索了解决方案,发现了一些解决方案,尝试了所有方法,但是当整个脚本完成时,我仍然立即获得全部输出...
我的代码看起来像这样(我添加了一些我在网上找到的行可以解决该问题,但是仍然没有运气,在下面的代码中,我删除了mysql的东西,因为它可以正常工作,数据已写入db):
<?php
header( 'Content-type: text/html; charset=utf-8' );
ob_implicit_flush(true);
ob_end_flush();
$con=mysqli_connect("...");
?>
<html>
<body>
<?php
for($d=1;$d<=5;$d++){
echo "$d";
echo str_repeat(' ', 4096);
ob_flush();
flush();
$query = "...";
mysqli_query($con,$query);
}
</body>
</html>
在这种情况下,脚本当然会立即运行,但是在实际情况下,每个循环实际上需要花费一些时间来执行其中的工作,因此在大约10秒钟后一切都完成之后,我得到了最终的回声。我想在每次for循环迭代后回显它,即大约每2s
最佳答案
下面的代码对我有用。但是,起初似乎没有用,因为一长串空格将错开的响应推向右侧,而我看不到这些响应。
请参见下面的THIS LINE HERE
:
<?php
$db_host = '...';
$db_user = '...';
$db_pass = '...';
$db_name = '...';
$con = new mysqli(
$db_host,
$db_user,
$db_pass,
$db_name
);
if ($con->connect_error) {
echo "$con->connect_error";
exit;
}
for ($d = 1; $d <= 5; $d++){
echo $d;
echo str_repeat(' ', 4096);
echo PHP_EOL; // <<< THIS LINE HERE
ob_flush();
flush();
$query = "SELECT SLEEP(5)";
mysqli_query($con, $query);
}
这个(简单的测试)也可以:
for ($i = 0; $i < 6; $i++) {
echo "$i is run." . PHP_EOL;
ob_flush();
flush();
sleep(10);
}
因此,创建一个独立页面,将以上内容粘贴到其中,并填写数据库详细信息。然后运行它,看看是否得到输出。如果这样做,那么您未包含的代码就会有一些(相似或其他)问题。如果不是,则服务器的配置可能会以某种方式阻止其运行。
不过,首先,请尝试使用更简单的版本,然后从那里开始。这也是一个不错的入门:
http://www.sitepoint.com/php-streaming-output-buffering-explained/
关于php - 冲洗甚至冲洗不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29851570/