FPDF/PHP: имена столбцов не извлекаются с помощью Mysqli_fetch_fields()

Итак, у меня есть проблема с библиотекой FPDF, которая используется для создания PDF-документа с данными из MYSQL-DB.

В PHP 5 весь код работает, и я получаю следующий вывод:

введите здесь описание изображения

Я использовал этот код для его создания:

<?php
require('mysql_table.php');

class PDF extends PDF_MySQL_Table
{
function Header()
{

    $this->SetFont('Arial','',18);
    $this->Cell(0,6,'test',0,1,'C');
    $this->Ln(10);
    //Ensure table header is output
    parent::Header();
}
}

//Connect to database
mysql_connect('localhost','root','');
mysql_select_db('testDB');

$pdf=new PDF();
$pdf->AddPage();

$prop=array('HeaderColor'=>array(255,150,100),
            'color1'=>array(210,245,255),
            'color2'=>array(255,255,210),
            'padding'=>2);
$pdf->Table('SELECT `first_name`, `last_name`, `title` FROM a3324_userWHERE DELETED = 0 order by `date_entered`',$prop);

header('Content-type: test/pdf');
$pdf->Output('test'.".pdf", 'D'); 

?>

Когда я попытался добиться того же на своем Linux-сервере, он отметил, что мне следует использовать mysqli_*, поскольку старая версия не поддерживается PHP 7.

Я заменил все функции их mysqli-вариантом и пришел к следующему результату: введите здесь описание изображения

Как видите, он работает, за исключением того, что не извлекает имена столбцов из базы данных. Я провел некоторое исследование и отметил, что старая функция для получения имен столбцов выглядит следующим образом:

foreach($this->aCols as $i=>$col)
    {
        if($col['c']=='')
        {
            if(is_string($col['f']))
                $this->aCols[$i]['c']=ucfirst($col['f']);
            else
                $this->aCols[$i]['c']=ucfirst(mysql_field_name($res,$col['f']));
        }
    }

Поскольку мне нужно было использовать mysqli, я обнаружил, что функция mysql_field_name() больше не используется и заменена на mysqli_fetch_field()или mysqli_fetch_fields().

Я пытался заменить mysql_field_name($res,$col['f']) на mysqli_fetch_fields($res,$col['f']) или на mysqli_fetch_field(), но это тоже не сработало.

Где может быть моя проблема?


person Kahn Kah    schedule 13.07.2016    source источник


Ответы (1)


Пытаться:

foreach($this->aCols as $i=>$col)
{
    if($col['c']=='')
    {
        if(is_string($col['f']))
            $this->aCols[$i]['c']=ucfirst($col['f']);
        else
            $this->aCols[$i]['c']=ucfirst(mysqli_fetch_field_direct($res, $col['f'])->name);
    }
}

или используйте:

function mysqli_field_name($res, $fieldnr) {
    $finfo = mysqli_fetch_field_direct($res, $fieldnr);
    return is_object($finfo) ? $finfo->name : false;
}
person user4762971    schedule 13.07.2016
comment
Благодарю вас! Про функцию mysqli_fetch_field_direct()- не узнал! Мой код теперь работает отлично! - person Kahn Kah; 14.07.2016