【问题标题】:Break query data into several files将查询数据分成几个文件
【发布时间】:2023-03-26 15:46:01
【问题描述】:

我想从数据库中获取表,然后按文件(每个文件中的 50 个条目)分解输出数据:list01.txt、list02.txt... 但不知何故,我对如何更有效地分解数据的问题感到困惑。

if ( $result = $mysqli->query($query) ) {

    icount = 0;
    while ( $row = mysqli_fetch_array($result) ) {
        if ( icount % 50 == 0 ) {
            $snum = int( icount / 50 );
            $filename = 'scripts/spisok'.$snum.'.txt';
            $handle = fopen( $filename, 'w' );
        }
        fwrite( $filename, $row['uname'].';'.$row['email'].'<br />' );
        icount++;
    }

    echo 'ok';
    $result->free();

}

我可以先将 $result 分解为 50 个条目的数组,然后将它们全部写入吗?对不起,我是 PHP 新手

【问题讨论】:

  • db数据发生变化时怎么办?
  • 别忘了关闭你的文件句柄。
  • 您似乎在任何地方都缺少$ 前面的$,您应该为fwrite() 提供文件句柄 ($handle) 作为其第一个参数,而不是文件名。
  • 抱歉刚刚从新手 JS 切换到新手 PHP。当数据发生变化时没关系,我只想在当前时间从 db 获取一些数据。只是脚本

标签: php


【解决方案1】:

你也可以使用array_chunk

<?php
  if ( $result = $mysqli->query( $query ) ) {
    $data = array();
    while( $row = mysqli_fetch_array( $result ) ) {
      $data[] = $row['uname'].';'.$row['email'];
    }
    $result->free();

    // divide an array into a desired number of split lists
    $chunks = array_chunk( $data, 50 );
    // loop through chunks
    foreach( $chunks as $index => $chunk ) {
      $file   = 'scripts/spisok'.( $index + 1 ).'.txt';
      $chunk  = implode( "<br />", $chunk );
      file_put_contents( $file, $chunk );
      // or
      /*
      $handle = fopen( $file, 'w' );
      fwrite( $handle, $chunk );
      fclose( $handle );
      */
    }
    unset( $data, $chunks );
  }
?>

【讨论】:

    【解决方案2】:

    除了这里和那里的一些语法错误之外,你所做的并没有什么特别的错误。

    试试这个:-

    if ( $result = $mysqli->query($query) ) {
    
        $icount = 0;
        $handle = NULL;
        while ( $row = mysqli_fetch_array($result) ) {
            if ( $icount % 50 == 0 ) {
                if ( $handle !== NULL ) {
                   fclose($handle);
                }
                $snum = int( $icount / 50 );
                $filename = 'scripts/spisok'.$snum.'.txt';
                $handle = fopen( $filename, 'w' );
            }
            fwrite( $handle, $row['uname'].';'.$row['email'].'<br />' );
            $icount++;
        }
    
        fclose($handle);
        echo 'ok';
        $result->free();
    
    }
    

    【讨论】:

    • 谢谢!我肯定忘了关把手
    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多