php - 将 SQL 表反序列化为对象集合

标签 php postgresql

我正在尝试将 SQL 表反序列化为 PHP 中的对象集合,但我不知道如何才能做到这一点。

在 C# 中,等效的是:

public class Object
{
    public string objectProperty { get; set; }
    public string anotherProperty { get; set; }
}

public void Deserialize()
{
    List<Object> collection = new List<Object>();

    // Assuming that we have an SQL statement returning a row

    foreach (Row row in returnedSqlRow)
    {
        collection.Add(new Object
        {
            objectProperty = row["objectProperty"],
            anotherProperty = row["anotherProperty"]
        });
    }
}

这会给我一个很好的 Objects 集合。

在我的 PHP 中我有以下内容:

class Book {
    public $CN; // cataloguenumber
    public $title;
    public $author;
    public $description;
    public $price;
    public $enteredby;
}

我的 SQL 语句是:

$books = pg_query($conn, 'SELECT cataloguenumber, title, author, description, price, enterby FROM CSBooks');

我可以像这样轻松访问行中的每个值:

    while($row = pg_fetch_row($books)) {

        echo $row[0] . '<br>';
        echo $row[1] . '<br>';
        echo $row[2] . '<br>';
        echo $row[3] . '<br>';
        echo $row[4] . '<br>';
        echo $row[5] . '<br>';
    }

但我不知道如何创建对象集合并将该行反序列化为 Book 对象并存储它。有等效的PHP吗?我查看了 pg_fetch_object(),但它似乎并不是我要找的东西。

最佳答案

我认为解决方案是使用 PDO 和 PDOStatement::fetchObject这将抽象所有 pg_* 函数并使您的数据库交互更易于管理。

默认情况下它将返回一个 stdObject 而不是一个数组,但您可以让它映射您的对象。

如果你真的需要使用 pg_* 函数而不是 PDO,那么会有一个肮脏的解决方案......(我很惭愧地提出它)

$a = ['a'=>'bla', 'b'=>1];
$shame = (object) $a;

然后在您的类中,您只需编写一个构造函数来将列绑定(bind)到对象字段...

关于php - 将 SQL 表反序列化为对象集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907683/

相关文章:

javascript - phalcon php 根据 Controller 和操作名称包含 js

使用 MySQL 的 PHP 有时会返回错误,有时会返回错误,尽管我什么也没做

php - 在 htmlentities 中使用 php 5.4 的新常量 ENT_DISALLOWED

python - 使用 Peewee 对数组进行 LIKE SQL 查询

postgresql - 使用Postgresql全文搜索模糊匹配所有搜索词

Django:加密密码到遗留(不是auth_user)表

php - 难题 - 需要在 PHP 中获取视口(viewport)大小(或任何其他方式)

php - 点赞按钮 - Facebook 在新域上出现错误 500

python - 选择语句生成对后 Python zip() 的 TypeError

postgresql - 如何安排 Postgres 查询在 Amazon RDS 上运行?