【发布时间】:2016-08-31 10:21:30
【问题描述】:
我在User.php 有一个简单的类:
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)(或任何其他有效参数)时,函数会执行所有操作,然后 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) "test@test.com"
[3]=>
string(13) "test@test.com"
["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")。没有任何变化。
我做错了什么?为什么我不能用fetch 创建一个User 类实例?
谢谢。
【问题讨论】: