Pg fetch object: примеры (PHP)
pg_fetch_object(PgSql\Result $result, ?int $row = null, string $class = "stdClass", array $constructor_args = []): object|falseФункция pg_fetch_object в PHP предназначена для извлечения строки результата запроса к базе данных PostgreSQL в виде объекта. Она используется при работе с расширением pgsql, когда необходимо получать данные в объектно-ориентированном стиле.
Функция вызывается после выполнения запросов pg_query или pg_execute. Она возвращает объект, свойства которого соответствуют именам полей выборки.
Функция имеет три параметра:
- result — обязательный ресурс результата запроса PostgreSQL, возвращаемый pg_query, pg_query_params или pg_execute.
- row — необязательный целочисленный параметр, указывающий номер извлекаемой строки. Нумерация начинается с нуля. Если не указан, функция последовательно возвращает следующую строку.
- class — необязательное имя класса, экземпляр которого будет создан. Если задан, функция создает объект указанного класса, иначе — объект 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
Возвращает строку в виде ассоциативного массива. Удобна при работе с массивами.
Возвращает строку в виде индексированного массива. Используется при необходимости доступа к полям по номерам.
Может возвращать данные как ассоциативный, индексированный массив или оба варианта одновременно.
Извлекает значение конкретного поля из результата запроса.
Функцию pg_fetch_object предпочтительнее использовать в объектно-ориентированном коде, когда требуется четкое разделение данных и логики.
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])Иван Петров
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);Иван Петров
<?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 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
while ($obj = pg_fetch_object($result)) {
echo $obj->id . ': ' . $obj->name . "\n";
}
?>1: Иван Петров 2: Мария Сидорова 3: Алексей Иванов
<?php
class User {
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}
}
$row = pg_fetch_object($result, null, 'User');
// Конструктор не будет вызван, свойства заполнятся напрямую
?><?php
$result = pg_query($conn, "SELECT NULL as empty_field");
$row = pg_fetch_object($result);
var_dump($row->empty_field);
?>NULL
<?php
$result = pg_query($conn, "SELECT COUNT(*) as total FROM users");
$row = pg_fetch_object($result);
echo $row->total;
?>42