2016-07-13 2 views
1

Так что у меня есть проблема с библиотекой FPDF, которая используется для создания PDF-документа с данными из MYSQL-DB.FPDF/PHP: имена столбцов не получены с помощью Mysqli_fetch_fields()

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

enter image description here

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

<?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-варианта и пришел к следующему результату: enter image description here

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

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(), но это тоже не сработало.

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

ответ

1

Try:

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; 
} 
+0

Спасибо! Я не узнал о 'mysqli_fetch_field_direct()' - функции! Теперь мой код отлично работает! –

Смежные вопросы