【问题标题】:put query results into an object将查询结果放入对象
【发布时间】:2010-09-23 03:35:02
【问题描述】:

我正在使用 php 和 postgresql。

我需要一个函数:

如果尚未连接,则连接到数据库 安全地运行查询 将结果放入对象中

例如: 我做了一个“从测试中选择*”的查询。我回来了 2 行......“测试”中有三列(id、fname、lname)。

我有一个名为 $ep 的对象。我希望能够将列名结果放入对象中,并将值放入对象中。所以我可以做一个 $ep->fname 的 var_dump ,它会显示一个包含两个结果的数组。

我不想将列名硬编码到我的函数中。我希望它是动态的。因此,无论我请求什么表或列,它都会为我将所有内容放入对象中。

【问题讨论】:

  • 你试过看 PDO 吗?

标签: php sql postgresql


【解决方案1】:

Object Relational Mapper (ORM) 可以为您提供您所描述的许多功能(以及更多功能)。看看:

Propel 代码如下所示:

$book = BookQuery::create()->findPK(123); // retrieve a record from a database
$book->setName('Don\'t be Hax0red!'); // modify. Don't worry about escaping
$book->save(); // persist the modification to the database

$books = BookQuery::create()  // retrieve all books...
  ->filterByPublishYear(2009) // ... published in 2009
  ->orderByTitle()            // ... ordered by title
  ->joinWith('Book.Author')   // ... with their author
  ->find();

foreach($books as $book) {
  echo  $book->getAuthor()->getFullName();
}

【讨论】:

    【解决方案2】:

    您需要构建自己的数组或对象,然后循环遍历结果,将它们中的每一个添加到数组/对象中。

    有些包包含此功能,例如ezSQL

    【讨论】:

      【解决方案3】:

      试试

      pg_fetch_object

      阅读文档

      例子

      <?php 
      $database = "test";
      $db_conn = pg_connect ("host=localhost port=5432 dbname=$database");
      if (!$db_conn): ?>
          <H1>Failed connecting to postgres database <?php echo $database ?></H1> <?php
          exit;
      endif;
      
      $ep = pg_query ($db_conn, "SELECT * FROM verlag ORDER BY autor");
      $row = 0; // postgres needs a row counter other dbs might not 
      
      while ($data = pg_fetch_object ($ep, $row)) {
          echo $data->fname;
          $row++;
      }
      
      ?>
      

      【讨论】:

      • -1 太疯狂了,有什么问题,请高亮,让我也学习一下。
      • 这似乎有效。我不得不从 while 循环中删除 $row,因为我收到了一条错误消息。
      • 我想知道有人在拼命拿我的身份证做事。我来这里是为了帮助不要敌意!::)
      • 我把你所做的放在一个函数中。现在我该怎么做才能访问函数外部的对象?
      • 两种方式,要么将 $data 从 $data = pg_fetch_object ($ep, $row) 传递给您正在调用的其他函数,要么将 $data 作为局部变量含义,您可以在最重要的是,一旦执行,您可以从任何地方访问此数据。如果是的话,这是否有意义,请投票并接受作为答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2012-04-30
      • 2019-12-29
      • 2019-06-05
      • 1970-01-01
      • 2014-02-08
      • 2016-05-05
      相关资源
      最近更新 更多