2016-07-13 28 views
1

Also habe ich ein Problem in Bezug auf die FPDF-Bibliothek, die verwendet wird, um ein PDF-Dokument mit Daten aus einer MYSQL-DB zu generieren.FPDF/PHP: Spaltennamen nicht abgerufen mit Mysqli_fetch_fields()

In PHP 5, der gesamte Code funktioniert, und ich erhalte die folgende Ausgabe:

enter image description here

ich diesen Code verwendet haben es für die Erzeugung:

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

?> 

Wenn Ich habe versucht, dasselbe in meinem Linux Server zu erreichen, es bemerkte mich, dass ich mysqli_ * verwenden sollte, da die alte Version von PHP 7 nicht unterstützt wird.

Ich habe alle Funktionen, die durch ihre mysqli-Variante ersetzt und haben zu folgendem Ergebnis gekommen: enter image description here

Wie Sie sehen, es funktioniert, außer es die Spaltennamen aus der Datenbank nicht abgerufen hat. Ich habe einige der Forschung getan und festgestellt, dass die alte Funktion die Spaltennamen ist die folgende abzurufen:

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'])); 
     } 
    } 

Da ich gebraucht wurde mysqli zu verwenden, fand ich, dass die Funktion mysql_field_name() nicht mehr verwendet und wurde ersetzt durch mysqli_fetch_field() oder mysqli_fetch_fields().

Ich habe versucht, die mysql_field_name($res,$col['f']) durch mysqli_fetch_fields($res,$col['f']) oder mysqli_fetch_field() zu ersetzen, aber das hat auch nicht funktioniert.

Wo könnte mein Problem liegen?

Antwort

1

Versuchen:

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); 
    } 
} 

oder -nutzung:

function mysqli_field_name($res, $fieldnr) { 
    $finfo = mysqli_fetch_field_direct($res, $fieldnr); 
    return is_object($finfo) ? $finfo->name : false; 
} 
+0

Thank you! Ich habe nichts über die 'mysqli_fetch_field_direct()' - Funktion herausgefunden! Mein Code funktioniert jetzt ausgezeichnet! –