Pg fetch object: примеры (PHP)

Использование pg_fetch_object для работы с PostgreSQL в PHP
Раздел: Базы данных (PostgreSQL)
pg_fetch_object(PgSql\Result $result, ?int $row = null, string $class = "stdClass", array $constructor_args = []): object|false
Основные сведения о pg_fetch_object

Функция pg_fetch_object в PHP предназначена для извлечения строки результата запроса к базе данных PostgreSQL в виде объекта. Она используется при работе с расширением pgsql, когда необходимо получать данные в объектно-ориентированном стиле.

Функция вызывается после выполнения запросов pg_query или pg_execute. Она возвращает объект, свойства которого соответствуют именам полей выборки.

Аргументы функции

Функция имеет три параметра:

  • result — обязательный ресурс результата запроса PostgreSQL, возвращаемый pg_query, pg_query_params или pg_execute.
  • row — необязательный целочисленный параметр, указывающий номер извлекаемой строки. Нумерация начинается с нуля. Если не указан, функция последовательно возвращает следующую строку.
  • class — необязательное имя класса, экземпляр которого будет создан. Если задан, функция создает объект указанного класса, иначе — объект stdClass.
Базовые примеры использования
Получение объекта stdClass
<?php
$conn = pg_connect("host=localhost dbname=test");
$result = pg_query($conn, "SELECT id, name FROM users");
$row = pg_fetch_object($result);
echo $row->name;
?>
Иван Петров
Указание конкретной строки
<?php
$row = pg_fetch_object($result, 2); // Получить третью строку
echo $row->id;
?>
3
Создание объекта пользовательского класса
<?php
class User {}
$row = pg_fetch_object($result, null, 'User');
echo get_class($row);
?>
User
Похожие функции в PHP

Возвращает строку в виде ассоциативного массива. Удобна при работе с массивами.

Возвращает строку в виде индексированного массива. Используется при необходимости доступа к полям по номерам.

Может возвращать данные как ассоциативный, индексированный массив или оба варианта одновременно.

Извлекает значение конкретного поля из результата запроса.

Функцию pg_fetch_object предпочтительнее использовать в объектно-ориентированном коде, когда требуется четкое разделение данных и логики.

Аналоги в других языках
Python (psycopg2)
import psycopg2
conn = psycopg2.connect("dbname=test")
cur = conn.cursor()
cur.execute("SELECT id, name FROM users")
row = cur.fetchone()
print(row['name'])  # если использовать DictCursor
# или
print(row[1])
Иван Петров
JavaScript (Node.js, pg library)
const { Client } = require('pg');
const client = new Client();
await client.connect();
const res = await client.query('SELECT id, name FROM users');
console.log(res.rows[0].name);
Иван Петров
MySQL (PHP, mysqli)
<?php
$mysqli = new mysqli("localhost", "user", "pass", "test");
$result = $mysqli->query("SELECT id, name FROM users");
$row = $result->fetch_object();
echo $row->name;
?>
Иван Петров
Типичные ошибки
Обращение к несуществующему свойству
<?php
$row = pg_fetch_object($result);
echo $row->undefined_field;
?>
Notice: Undefined property: stdClass::$undefined_field
Попытка извлечь данные из неверного ресурса
<?php
$row = pg_fetch_object(false);
?>
Warning: pg_fetch_object() expects parameter 1 to be resource, bool given
Использование после закрытия соединения
<?php
$result = pg_query($conn, "SELECT ...");
pg_close($conn);
$row = pg_fetch_object($result);
?>
Warning: pg_fetch_object(): supplied resource is not a valid PostgreSQL result resource
Изменения в версиях PHP

В PHP 8.0 функция стала выбрасывать исключение TypeError при передаче неверного типа аргумента, вместо генерации предупреждения. В PHP 7.4 добавлена возможность указывать имя класса с использованием ключевого слова 'class'.

<?php
// PHP 8.0+
try {
    pg_fetch_object('invalid');
} catch (TypeError $e) {
    echo $e->getMessage();
}
?>
pg_fetch_object(): Argument #1 ($result) must be of type PgSql\Result, string given
Расширенные примеры
Итерация по всем строкам
Пример php
<?php
while ($obj = pg_fetch_object($result)) {
    echo $obj->id . ': ' . $obj->name . "\n";
}
?>
1: Иван Петров
2: Мария Сидорова
3: Алексей Иванов
Использование с конструктором класса
Пример php
<?php
class User {
    public function __construct($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }
}
$row = pg_fetch_object($result, null, 'User');
// Конструктор не будет вызван, свойства заполнятся напрямую
?>
Работа с NULL значениями
Пример php
<?php
$result = pg_query($conn, "SELECT NULL as empty_field");
$row = pg_fetch_object($result);
var_dump($row->empty_field);
?>
NULL
Использование алиасов в запросе
Пример php
<?php
$result = pg_query($conn, "SELECT COUNT(*) as total FROM users");
$row = pg_fetch_object($result);
echo $row->total;
?>
42

PHP pg_fetch_object function comments

En
Pg fetch object Fetch a row as an object