PDO获取单个类不起作用

时间:2015-09-11 15:04:12

标签: php pdo

我正在创建一个数据库抽象类,它绑定像ORM这样的对象。我遇到了特定情况的问题,获取单行并绑定到类。虽然同样适用于fetchAll()但我无法弄清楚为什么使用fetch(PDO :: FETCH_CLASS)对象返回null。 如果我使用PDO :: FETCH_LAZY它可以工作,但不是对传递的类的正确绑定。 这里的代码。 Database()类使用PDO连接到db。 Products()是由具有相同名称的表的公共属性组成的类。 控制器:

public function editProducts($params) {
    $products = new Products();
    $db = new Database ();
    $id = array_keys($params);
    $products = $db->findById($products, $id[0]); // auto Bind object fetched=no and POST params?
    $this->template = new Template();
    $this->template->renderArgs("product", $products);
    $this->template->renderArgs("page_title", "Edit product " . $products->title);
    $this->template->render(get_class($this), "editProducts");

}

数据库类:

public function findById($object,$id) {
    try {
    $table = $this->objectInjector($object);
    } catch (Exception $e) {
        if (APP_DEBUG) {
            d($e->getTrace());
        }
        return;
    }
    $statement = "SELECT * FROM $table WHERE id=:id";
    $this->stm = $this->pdo->prepare($statement);
    $this->bindValue(":id",$id);
    return $this->fetchSingleObject($object);
}

抽象提取的方法:

public function fetchSingleObject($object) {
    $this->execute();
    $this->stm->setFetchMode(PDO::FETCH_CLASS, get_class($object));
    return $this->stm->fetch(PDO::FETCH_CLASS);
    //return $this->stm->fetch(PDO::FETCH_LAZY); this works!
}

我错过了什么? fetchAll()以这种方式运行良好:

 public function fetchObjectSet($object) {
        $this->execute();
        $this->stm->setFetchMode(PDO::FETCH_CLASS, get_class($object));
        return $this->stm->fetchAll(PDO::FETCH_CLASS);
    }

非常感谢你。 PS:像$ this-> execute()这样的方法只是pdo-> statment方法的缩写,因为pdo和stm是db类实例变量。

1 个答案:

答案 0 :(得分:-1)

手册说明:

  

bool PDOStatement :: setFetchMode(int $ PDO :: FETCH_CLASS,string   $ classname,array $ ctorargs)

所以也许试试:

$this->stm->setFetchMode(PDO::FETCH_CLASS, 'get_class', $object );/* is $object an array ? */
or, without
$this->stm->setFetchMode(PDO::FETCH_CLASS, 'get_class' );