2016-05-05 9 views
0

ich eine einfache Klasse in User.php haben:PDO mit FETCH_CLASS holen gibt false zurück

class User { 
    private $id; 
    private $username; 
    private $password; 
    private $email; 
    private $first_name; 
    private $last_name; 
    private $active; 
    // Getters and setters generated by NetBeans... 
} 

Meine Datenbanktabelle users genannt:

`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`username` varchar(100) NOT NULL, 
`password` varchar(100) NOT NULL, 
`email` varchar(100) NOT NULL, 
`first_name` varchar(100) DEFAULT NULL, 
`last_name` varchar(100) DEFAULT NULL, 
`active` int(10) unsigned DEFAULT '0', 
PRIMARY KEY (`id`), 
UNIQUE KEY `id_UNIQUE` (`id`), 
UNIQUE KEY `username_UNIQUE` (`username`), 
UNIQUE KEY `email_UNIQUE` (`email`) 

Und einen Teil meiner UserDAO.php Datei:

... 
require_once './db/DBConn.php'; 
require_once './user/User.php'; 
... 
public static function getById($id) { 
    try { 
     $db = DBConn::getInstance(); 
     $query = "SELECT * FROM users WHERE id=:id"; 
     $stmt = $db->getConn()->prepare($query); 
     $stmt->execute(array('id' => $id)); 
     $user = $stmt->fetch(PDO::FETCH_CLASS, "User"); 
     var_dump($user); 
     return $user; 
    } catch (PDOException $e) { 
     echo "<br/>ERROR: User fetching by ID failed!<br/>"; 
     return 0; 
    } 
} 
... 

Also, wenn ich anrufe, sagen wir, getById(1) (oder mit jedem anderen Wert ID-Parameter), die Funktion führt alles aus und dann die var_dump($user) Ausgänge bool(false).

Wenn ich nur stellen fetch() statt fetch(PDO::FETCH_CLASS, "User") wird die var_dump geben folgendes:

array(14) { 
    ["id"]=> 
    string(2) "1" 
    [0]=> 
    string(2) "1" 
    ["username"]=> 
    string(4) "abcd" 
    [1]=> 
    string(4) "abcd" 
    ["password"]=> 
    string(60) "$2y$10$wTCajtRU1xXf6Z65dZYjk.mx3tClFLujshS49SvYIuGW/lDZSH3nK" 
    [2]=> 
    string(60) "$2y$10$wTCajtRU1xXf6Z65dZYjk.mx3tClFLujshS49SvYIuGW/lDZSH3nK" 
    ["email"]=> 
    string(13) "[email protected]" 
    [3]=> 
    string(13) "[email protected]" 
    ["first_name"]=> 
    string(7) "John" 
    [4]=> 
    string(7) "John" 
    ["last_name"]=> 
    string(13) "Johnson" 
    [5]=> 
    string(13) "Johnson" 
    ["active"]=> 
    string(1) "0" 
    [6]=> 
    string(1) "0" 
} 

Ich habe auch mit fetch(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,"User") versucht. Nichts verändert sich.

Was mache ich falsch? Warum kann ich keine User Klasseninstanz mit der fetch erstellen?

Danke.

Antwort

1

Sie können PDO::FETCH_CLASS mit Fetch nicht verwenden. Sie müssen einen setFetchMode() Anruf vorher:

public static function getById($id) { 
    $db = DBConn::getInstance(); 
    $query = "SELECT * FROM users WHERE id=:id"; 
    $stmt = $db->getConn()->prepare($query); 
    $stmt->execute(array('id' => $id)); 
    $stmt->setFetchMode(PDO::FETCH_CLASS, 'User'); 
    return $stmt->fetch(); 
} 

Außerdem bitte beachten Sie, dass Sie nie Fehler Ausnahmen zu berichten, sie fangen sollte. Es macht deinen Code schmutzig, nicht erreichbar und unsicher.

+0

Das löste das Problem. Vielen Dank! :) – vtomic85