Экспортировать массив результатов MySQL в Excel

Когда я запускаю этот запрос "SELECT name , domain FROM my_data ORDER by id" в phpmyadmin результат примерно такой:

     name   domain  
    Bahamdan Group Holding Co.  salam.com
    ARINA RAMLEE    salam.net

вот мой код:

 $con1 = mysqli_connect("localhost", "root", "", "test_pr");
         $sql2 = "SELECT name , domain FROM my_data ORDER by id";
         $result2 = mysqli_query($con1, $sql2);
         $rows = array();
         while ($row = mysqli_fetch_array($result2, MYSQLI_ASSOC)) {
             $rows[] = $row . PHP_EOL;
         }
         $nn = implode("", $rows);
         var_dump($rows);
         echo $nn . PHP_EOL;
         $file = fopen("export.csv", "w");
         file_put_contents("export.csv", $nn);
         fclose($file);

Но это не работает.... Я хочу, чтобы он был в файле, точно так же, как он показывает его в phpmyadmin. Я имею в виду, я хочу, чтобы он был в файле Excel, в котором есть два столбца, и один из столбцов является именем, а другой - доменом и содержит данные строк под столбцами. Я попробовал это, и это работает, но я не знаю, как создать файл, который я хотел с этим.

 $con1 = mysqli_connect("localhost", "root", "", "test_pr");
         $sql2 = "SELECT name , domain FROM my_data ORDER by id";
         $result2 = mysqli_query($con1, $sql2);
         $rows = array();
         while ($row = mysqli_fetch_array($result2, MYSQLI_ASSOC)) {
             $domains[] = $row['domain'] . PHP_EOL;
             $name[] = $row['name']. PHP_EOL;
         }

var_dump($domains);
var_dump($name);
         $nn = implode("", ??????);
         $file = fopen("export.csv", "w");
         file_put_contents("export.csv", $nn);
         fclose($file);

Вот вардумп

array (size=2)
  0 => string 'salam.com
' (length=11)
  1 => string 'salam.net
array (size=2)
  0 => string 'Bahamdan Group Holding Co.
' (length=28)
  1 => string 'ARINA RAMLEE

1 ответ

Вот пример кода для создания листов Excel с использованием запросов MySQL, используемых для извлечения данных.

//create query to select as data from your table
$select = "SELECT * FROM table_name";

//run mysql query and then count number of fields
$export = mysql_query ( $select ) 
       or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields ( $export );

//create csv header row, to contain table headers 
//with database field names
for ( $i = 0; $i < $fields; $i++ ) {
    $header .= mysql_field_name( $export , $i ) . ",";
}

//this is where most of the work is done. 
//Loop through the query results, and create 
//a row for each
while( $row = mysql_fetch_row( $export ) ) {
    $line = '';
    //for each field in the row
    foreach( $row as $value ) {
        //if null, create blank field
        if ( ( !isset( $value ) ) || ( $value == "" ) ){
            $value = ",";
        }
        //else, assign field value to our data
        else {
            $value = str_replace( '"' , '""' , $value );
            $value = '"' . $value . '"' . ",";
        }
        //add this field value to our row
        $line .= $value;
    }
    //trim whitespace from each row
    $data .= trim( $line ) . "\n";
}
//remove all carriage returns from the data
$data = str_replace( "\r" , "" , $data );


//create a file and send to browser for user to download
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$file_name.".csv");
print "$header\n$data";
exit;
Другие вопросы по тегам