【问题标题】:PHP - Fetching an Object from a Custom Class using PDO [duplicate]PHP - 使用 PDO 从自定义类中获取对象
【发布时间】:2015-03-01 15:49:27
【问题描述】:

所以我是 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 方法之外设置 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)

【问题讨论】:

  • 详细说明这不起作用这句话可能会有所帮助。例如。你收到错误了吗? fetch() 是否返回 false?还是它返回了一个对象但未达到预期?
  • 抱歉没有抛出错误,但是当我使用 var_dump($object) 它返回一个 bool(false) 表明我的对象尚未创建
  • PDO errorInfo() 方法有什么启示吗?
  • 顺便说一句,编辑您的问题以包含这些额外的详细信息将很有帮助,并且会引起对该问题的一些新关注,因为它会在标签供稿中显示为最近修改。
  • 太棒了,谢谢你的建议

标签: php mysql pdo


【解决方案1】:

您可以使用此代码示例:

$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 对象

【讨论】:

  • 你为什么不提到它是 Doctrine,因此不能与香草 PDO 一起使用?
  • 在我的情况下,我想更新的实体不能直接用学说更新。这就是为什么我必须创建一个自定义请求。但我可以直接与 Doctrine 检索连接。我只是得到了与学说的联系,但以下所有代码就像直接使用 PDO 一样
  • 但是您不明白您不是在为自己写答案,而是为别人写答案吗?谁可能既没有 $this->getEntityManager() 也没有 FetchMode::CUSTOM_OBJECT?
  • 我更新了代码并通过 PDO 获取了 conn。
  • FetchMode::CUSTOM_OBJECT 仍然存在。
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2015-06-02
相关资源
最近更新 更多