2017-05-15 2 views
0

J'utilise php 7, en essayant d'obtenir un fichier csv à partir des données stockées dans le tableau qui sont "id", "name", "code" , "catégorie", "prix", "stock_count"Attention: mysqli_fetch_field_direct(): Le décalage de champ n'est pas valide pour le résultat sur la ligne 16

choses sont bien, mais obtenir des avertissements comme

<b>Warning</b>: mysqli_fetch_field_direct(): Field offset is invalid for resultset in <b>C:\xampp\htdocs\php_csv_file_export\php_csv_export_method1.php</b> on line <b>8</b><br /> 


<b>Warning</b>: mysqli_fetch_field_direct(): Field offset is invalid for resultset in <b>C:\xampp\htdocs\php_csv_file_export\php_csv_export_method1.php</b> on line <b>8</b><br /> 
code

est inférieure à

<?php 
     $con= mysqli_connect("localhost", "root", "", "phpp"); 
     $result=mysqli_query($con,"select * from top"); 
     $num_column=mysqli_num_rows($result); 
     $csv_header = ''; 
     for($i=0;$i<$num_column;$i++) 
     { 
      if(isset(mysqli_fetch_field_direct($result,$i)->name)) 
      { 
       $csv_header .= '"' . mysqli_fetch_field_direct($result,$i)->name . '",'; 
      } 
     } 
     $csv_header .= "\n"; 
     $csv_row =''; 
     while($row = mysqli_fetch_row($result)) 
     { 
      for($i=0;$i<$num_column;$i++) 
      {   
       if(isset($row[$i])) 
       { 
        $csv_row .= '"' . $row[$i] . '",'; 
       }    
      } 
      $csv_row .= "\n"; 
     } 
     /* Download as CSV File */ 
     header('Content-type: application/csv'); 
     header('Content-Disposition: attachment; filename=toy_csv.csv'); 
     echo $csv_header . $csv_row; 
     exit; 
    ?> 

Répondre

1

probablement parce que vous Looping les RANGS au lieu de votre colums

$num_column=mysqli_num_rows($result); // rows != Columns 

Je pense que vous cherchez http://php.net/manual/en/mysqli-result.fetch-fields.php et vous pouvez faire quelque chose comme:

foreach(mysqli_fetch_fields($result) as $field){ 
    $csv_header .= '"' . $field->name . '",'; 
    unset($field); 
} 

Si vous utilisiez une instruction, vous pourriez faire quelque chose comme:

$meta = mysqli_stmt_result_metadata($stmt); 
    foreach (mysqli_fetch_field($meta) as $field) { 
     $csv_header .= '"' . $field->name . '",'; 
     unset($field); 
    }