2016-04-12 7 views
0

ich PHP bin studieren und der Aufbau einen einfachen Web-App speichern \ Abrufen von Daten aus der Datenbank. Ich baute eine User Klasse und ich versuche, Objekte basierend auf dieser Klasse zu erstellen und die relevanten Parameter an den Konstruktor übergeben. Ich bin in der Lage, Daten aus der Datenbank abzurufen, gefolgt von mehreren Hilfslinien und ich bekomme immer noch ein leeres Feld in der Front.PHP - nicht in der Lage Objekte mit Daten zu instanziiert

class User{ 
    protected $firstName; 
    protected $lastName; 
    protected $pass; 

    function __construct($firstn,$lastn,$upass){ 
     $this->firstName = $firstn; 
     $this->lastName = $lastn; 
     $this->pass = $upass; 
    } 
    function setFname($first){ 
     $this->firstName = $first; 
    } 
    function setLname($last){ 
     $this->lastName = $last; 
    } 
    function setPass($pass){ 
     $this->pass = $pass; 
    } 

} 

Dies ist der Teil, wo ich user Objekte und schieben Sie sie in das Array bin zu schaffen.

if($stmt =mysqli_prepare($conn, $getUsersStatement)){ 
     mysqli_stmt_execute($stmt); 
     mysqli_stmt_bind_result($stmt,$first,$last,$pass,$id); 
     $resultArray = []; 
     while(mysqli_stmt_fetch($stmt)){ 
//   $user = new User($first,$last,$pass); 
      $user = new User($first,$last,$pass); 
      $user->setFname($first); 
      $user->setLname($last); 
      $user->setPass($pass); 
//    $user->lastName =$last; 
//    $user->pass =$pass; 
//   printf ("%s %s %s\n", $first, $last, $pass,$id); //this works and prints the data 
      array_push($resultArray,$user); 
     } 
     /* close statement */ 
     echo (json_encode($resultArray)); 
     mysqli_stmt_close($stmt); 
    } 

Dies ist die Ausgabe:

[{},{},{},{},{},{},{}] 

Antwort

3

json_encode zeigt keine geschützten Eigenschaften Ihrer Klasse an. Wenn Sie PHP 5.4+ verwenden, können Sie die folgende Methode zur Klasse hinzufügen:

public function jsonSerialize() 
{ 
    return get_object_vars($this); 
} 

und die Definition ändern

class User implements JsonSerializable { 

Dadurch werden alle Felder auf dem Encoder zur Verfügung stellen.

(Alternativ als schneller zu beheben, stellen Sie Ihre Felder Öffentlichkeit statt, aber das ist nicht so sauber.)

+0

Das ist es, danke! – undroid

0

Ist das Ihre vollständige Code? Sie müssen die abgerufenen Zeilen an Variablen binden, wie so:

mysqli_stmt_bind_result($stmt, $first, $last, $pass); 

siehe http://php.net/manual/de/mysqli-stmt.fetch.php

Wenn Sie das tun:

$user = new User('MyFirstname','MyLastname','MyNotSecurePassword'); 
array_push($resultArray, $user); 

es funktionieren sollte. Überprüfen Sie, ob Ihre Variablen $first, $last, $pass gesetzt sind!

+0

ich den vollständigen Code angebracht. Ich bin in der Lage, die Daten zu "echo", aber ich kann die Daten nicht einzelnen Objekten hinzufügen. Bitte sehen Sie meine aktualisierte Beschreibung. – undroid

Verwandte Themen