警告:mysqli_fetch_field_direct():字段偏移对结果集无效

时间:2017-05-15 11:26:22

标签: mysqli export-to-csv php-7

我正在使用php 7,尝试从表中存储的数据中获取csv文件 “id”,“name”,“code”,“category”,“price”,“stock_count”

事情很好,但收到警告

<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 />

代码低于

<?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;
    ?>

1 个答案:

答案 0 :(得分:1)

可能是因为你正在循环ROWS而不是你的colums

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

我认为您正在寻找http://php.net/manual/en/mysqli-result.fetch-fields.php并且您可以执行以下操作:

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

如果您使用的是声明,则可以执行以下操作:

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