2016-05-05 3 views
0

У меня есть простой класс в User.php:PDO выборки с FETCH_CLASS возвращает ложь

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

Моя таблица базы данных с именем users:

`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`) 

и часть моего UserDAO.php файла:

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

Итак, когда я звоню, допустим, getById(1) (или с любым другим значением val id), функция выполняет все, а затем выходы var_dump($user)bool(false).

Если я ставлю только fetch() вместо fetch(PDO::FETCH_CLASS, "User"), то var_dump даст следующее:

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" 
} 

Я также попытался с fetch(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,"User"). Ничего не меняется.

Что я делаю неправильно? Почему я не могу создать экземпляр класса User с помощью fetch?

Спасибо.

ответ

1

Вы не можете использовать PDO::FETCH_CLASS с извлечением. Вы должны сделать setFetchMode() вызов заранее:

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

Кроме того, обратите внимание, что вы никогда не должны перехватывать исключения ошибок сообщать о них. Это делает ваш код грязным, неподъемным и небезопасным.

+0

Это решило проблему. Благодаря! :) – vtomic85

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