【问题标题】:PDO FETCH_CLASS when fields and columns have different names字段和列具有不同名称时的 PDO FETCH_CLASS
【发布时间】:2015-10-03 08:15:29
【问题描述】:

来自文档fetchAllFETCH_CLASS

<?php
class fruit {
    public $name;
    public $colour;
}

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
var_dump($result);
?>

经常发生列名与类中定义的字段不同的情况。我想知道当查询获取不同的列名时是否有一些干净的方法来填充类的字段:

$sth = $dbh->prepare("SELECT f_name, f_colour FROM fruit");

是否有将列名称映射到字段的通用解决方案?我为 FETCH_MODE 尝试了几种组合,希望其中一种能够将结果传递给构造函数,但它们都不起作用。

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    经常会发生列名与类中定义的字段不同的情况。

    一开始就不应该发生这种情况。 当列名被认为与类属性匹配时,这种获取模式的真正目的是使属性分配变得简单。因此,程序员自始至终都使用相同的命名方式——SQL 表列名称、HTML 表单输入字段名称以及相应的类属性。这将是真正的通用解决方案

    但是,如果您想要的话,有两种解决方案,一种是基于 SQL 的,通过在查询中使用别名,另一种是基于 OOP,您可以在其中使用魔术__set() 方法,您可以在其中实现您希望的任何重命名逻辑。

    【讨论】:

    • “因此,程序员自始至终都使用相同的命名 - SQL 表列名称、HTML 表单输入字段名称以及相应的类属性。”如果你曾经,甚至早在 2015 年,告诉我你要在面试中回答问题时这样做,我会直接要求你立即离开。
    • @designermonkey 为什么在整个软件中将所有内容命名为相同的这种糟糕风格?什么是更好的解决方案?为什么要把他赶出去?
    猜你喜欢
    • 2017-09-17
    • 2017-03-03
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2020-11-30
    • 2011-12-24
    相关资源
    最近更新 更多