将查询数据分解为多个文件


Break query data into several files

我想从数据库中获取表,然后按文件(每个文件中有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 的新手

您也可以使用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 );
  }
?>

除了一些语法错误之外,您所做的没有什么特别的错误。

试试这个:-

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();
}