PHP - 使用PDO从自定义类中获取对象

时间:2015-03-01 15:49:28

标签: php mysql oop pdo fetch

所以我是PHP的新手,特别是PDO的世界。 我正在使用PDO从表中选择一些数据并从这些数据中创建一个对象。我成功地使用PDO创建了一个默认对象并访问了结果。这是用于获取默认对象的fetch语句,该语句按预期工作:

$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_OBJ);

我要做的下一件事是获取结果并从我创建的预定义类中创建自定义对象。我根据以下声明基于第一个声明使用的内容,但是,这不起作用

$stmt->execute();
$user_object = $stmt->fetch(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'classname');

我通过在fetch方法之外设置获取模式来实现它,可以在这里看到:

$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_CLASS| PDO::FETCH_PROPS_LATE,'classname');
$object = $stmt->fetch();

我已经查阅了PHP手册,但我不明白为什么我不能像第二个那样声明,即在fetch语句中设置fetchmode。

由于

更新

以下声明:

$user_object = $stmt->fetch(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'classname');
var_dump($stmt->errorInfo());
var_dump($user_object);

退货 -

array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL } bool(false)

2 个答案:

答案 0 :(得分:0)

     public bool PDOStatement::setFetchMode ( int $mode ) 

<强>模式        获取模式必须是PDO :: FETCH_ *常量之一。

  public mixed PDOStatement::fetch ([ int $fetch_style [, int 
    $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )

<强> fetch_style 控制下一行将如何返回给调用者。该值必须是PDO :: FETCH_ *常量之一,默认值为PDO :: ATTR_DEFAULT_FETCH_MODE(默认为PDO :: FETCH_BOTH)。

http://php.net/manual/en/pdostatement.setfetchmode.php

  

文档说只能使用其中一种获取模式。你不能拥有 PDO :: FETCH_CLASS | PDO :: FETCH_PROPS_LATE 模式。 只有一种模式

答案 1 :(得分:0)

您可以使用此代码示例:

$conn = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$sql = 'SELECT m.id, p.id_product productId, m.margin oldPrice
        FROM prefix_product p
        LEFT JOIN margin m
        ON p.id_product=m.product_id
        WHERE p.id_product=1
        ';
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_CLASS, Class::class);
return $stmt->fetch();

它返回用列名初始化的 Class 对象