【问题标题】:PDO fetch with FETCH_CLASS returns false使用 FETCH_CLASS 获取 PDO 会返回 false
【发布时间】: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 类实例?

谢谢。

【问题讨论】:

    标签: php class pdo fetch


    【解决方案1】:

    您不能将 PDO::FETCH_CLASS 与 fetch 一起使用。您必须事先拨打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();
    }
    

    此外,请注意永远不要捕获错误异常来报告它们。它使您的代码变脏、无法维护和不安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2014-05-18
      • 1970-01-01
      • 2011-12-24
      • 2013-09-29
      相关资源
      最近更新 更多