如何在PHP中插入大量数据时回显数字序列?

时间:2016-11-25 17:49:02

标签: php mysql web

我正在尝试用PHP做到这一点。

此代码应在users表中插入500000行,并且在每行之后应在新行中打印$ C(last for loop counter)的值,但它无法正常工作。它正确插入行,但插入行后不打印$ c。 为什么它不能那样工作? 我怎样才能更新此代码以便像我想要的那样工作?

提前全部谢谢

 <?php
   $handler = new PDO("mysql:host=localhost;dbname=test",'root','');
   $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   function randomname(){
     $len = mt_rand(20,50);
     $string = "";
     for($i=0;$i<$len;$i++){
       $ch = mt_rand(32, 122);
        if(($ch == 32 && $string != "") || ($ch >=97 && $ch <=122))
          $string .= chr($ch);
        else
          continue;
      }
      return $string;
   }

   function randomemail(){
     $len = mt_rand(7,15);
     $string = "";
    for($i=0;$i<$len;$i++){
         $ch = mt_rand(32, 122);
       if(($ch == 32 && $string != "") || ($ch >=97 && $ch <=122))
          $string .= chr($ch);
       else
         continue;
     }
     if($len < 10)
       return $string."@hotmail.com";
     else
       return $string."@gmail.com";
    }

    ini_set('max_execution_time', 500000);

   for($c = 0; $c<=500000;$c++){
     $name = randomname();
     $mail = randomemail();
      $query = $handler->query("insert into users(name, mail, password, created_at) values('$name', '$mail', '123132', now())");
      echo "$c</br>";
    }

1 个答案:

答案 0 :(得分:0)

为了性能,PHP会在一切都完成后写入。

如果您想强制刷新输出缓冲区,可以通过使用以下代码包装应立即写出的代码来执行此操作:

ob_end_flush();

// You code goes here

ob_start();

现在,每次你写东西(使用echo,print或类似东西)时,PHP都会刷新缓冲区并写入输出。请注意,这会降低性能。还有一些网络服务器尝试禁用它,因此可能需要一些弱化。