我正在尝试使用php中的for循环将行插入MySQL数据库。我想要的是回显在完成时插入的特定行名称。我尝试了flush方法,但它没有用,甚至没有ob_flush。
然后我在这里搜索了解决方案并找到了一些,尝试了所有内容,但是当整个脚本完成后我仍然可以立即获得输出...
我的代码看起来像这样(我添加了一些我在网上找到的行可以解决问题,但仍然没有运气,在下面的代码中我删除了mysql的东西,因为它工作正常,数据被写入分贝):
<?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
答案 0 :(得分:0)
以下代码适合我。然而,它起初并不是似乎,因为长长的空间将错开的响应推向右边,在那里我看不到响应。
请参阅下面的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/