Pg fetch result: примеры (PHP)
pg_fetch_result(PgSql\Result $result, $field = ?): string|false|nullФункция pg_fetch_result в PHP предназначена для извлечения значения из результата запроса к базе данных PostgreSQL. Она используется после выполнения запросов функциями pg_query или pg_send_query и получения ресурса результата.
Функция поддерживает два варианта синтаксиса:
- pg_fetch_result(resource $result, int $row, mixed $field) — извлекает значение из указанной строки и поля.
- pg_fetch_result(resource $result, mixed $field) — извлекает значение из текущей строки, на которую указывает внутренний указатель.
Параметры:
- $result — ресурс результата запроса PostgreSQL, возвращаемый функциями pg_query, pg_send_query или pg_get_result.
- $row (необязательный) — номер строки для извлечения данных (нумерация с 0). Если не указан, используется текущая строка.
- $field — имя столбца (строка) или его индекс (целое число). Индексы начинаются с 0.
Функция возвращает значение ячейки в виде строки или NULL в случае ошибки или отсутствия данных.
$result = pg_query($conn, "SELECT name, age FROM users WHERE id = 1");
$value = pg_fetch_result($result, 0, 'name');
echo $value;Иван
$result = pg_query($conn, "SELECT name, age FROM users");
$value = pg_fetch_result($result, 2, 0); // Третья строка, первый столбец
echo $value;Мария
$result = pg_query($conn, "SELECT name, age FROM users");
pg_fetch_row($result); // Перемещаем указатель на первую строку
$value = pg_fetch_result($result, 'age');
echo $value;25
$result = pg_query($conn, "SELECT name FROM users WHERE id = 999");
$value = pg_fetch_result($result, 0, 'name');
var_dump($value);bool(false)
В PHP для работы с результатами PostgreSQL существует несколько альтернативных функций:
- pg_fetch_row — извлекает строку как индексированный массив. Удобна для последовательной обработки.
- pg_fetch_assoc — извлекает строку как ассоциативный массив. Позволяет обращаться к полям по имени.
- pg_fetch_array — извлекает строку как массив обоих типов (ассоциативный и индексированный). Используется при необходимости гибкого доступа.
- pg_fetch_object — возвращает объект со свойствами, соответствующими именам столбцов. Предпочтительна в объектно-ориентированном коде.
pg_fetch_result применяется при необходимости получить одно значение из известной позиции. Остальные функции лучше подходят для обработки целых строк или итерации по всему результату.
cur.execute("SELECT name FROM users WHERE id = 1")
value = cur.fetchone()[0]
print(value)Иван
const res = await client.query('SELECT name FROM users WHERE id = 1');
const value = res.rows[0].name;
console.log(value);Иван
$stmt = $pdo->query("SELECT name FROM users WHERE id = 1");
$value = $stmt->fetchColumn();
echo $value;Иван
Отличия: В Python и JavaScript результат обычно получают в виде структур данных (кортежи, объекты), а не через отдельную функцию для одного значения. В PHP PDU аналогом является метод fetchColumn.
$result = pg_query($conn, "SELECT name FROM users LIMIT 1");
$value = pg_fetch_result($result, 5, 'name'); // Всего 1 строка
echo $value;bool(false)
$result = pg_query($conn, "SELECT name FROM users");
$value = pg_fetch_result($result, 0, 'full_name'); // Поле не существует
var_dump($value);bool(false)
$result = pg_query($conn, "SELECT name FROM users");
$value = pg_fetch_result($result, 'zero', 'name'); // Строка вместо числа
var_dump($value);bool(false)
$result = pg_query($conn, "SELECT name FROM users");
pg_close($conn);
$value = pg_fetch_result($result, 0, 'name'); // Ресурс уже недействителен
var_dump($value);Warning: pg_fetch_result(): supplied resource is not a valid PostgreSQL result resource
В PHP 8.0 функция pg_fetch_result претерпела следующие изменения:
- Параметр $result теперь ожидает объект PgSql\Result вместо ресурса (resource). Это часть общего перехода на объекты для расширений баз данных.
- При передаче неверного типа аргумента выбрасывается исключение TypeError, а не предупреждение.
- Функция возвращает null при ошибке, но в строгом режиме может генерировать исключения для некорректных операций.
// PHP 7
$value = pg_fetch_result(false, 0, 'name'); // Warning
// PHP 8
$value = pg_fetch_result(false, 0, 'name'); // TypeError$result = pg_query($conn, "SELECT COUNT(*) as cnt, AVG(age) as avg_age FROM users");
$count = pg_fetch_result($result, 0, 'cnt');
$avgAge = pg_fetch_result($result, 0, 'avg_age');
echo "Всего пользователей: $count, средний возраст: $avgAge";Всего пользователей: 42, средний возраст: 31.5
$result = pg_query($conn, "SELECT id, name FROM users ORDER BY id");
$totalRows = pg_num_rows($result);
for ($i = 0; $i < $totalRows; $i++) {
$name = pg_fetch_result($result, $i, 'name');
echo "Пользователь $i: $name\n";
}Пользователь 0: Иван Пользователь 1: Мария Пользователь 2: Петр
$result = pg_query($conn,
"SELECT CONCAT(name, ' - ', age) as info, EXTRACT(YEAR FROM created_at) as year FROM users"
);
$info = pg_fetch_result($result, 0, 'info');
$year = pg_fetch_result($result, 0, 'year');
echo "$info (регистрация: $year год)";Иван - 25 (регистрация: 2023 год)
$result = pg_query($conn, "SELECT image_data FROM user_images WHERE id = 1");
$binaryData = pg_fetch_result($result, 0, 0);
file_put_contents('image.jpg', $binaryData);// Файл image.jpg создан
$result = pg_query($conn, "SELECT settings->>'theme' as theme FROM users WHERE id = 1");
$theme = pg_fetch_result($result, 0, 'theme');
echo "Тема оформления: $theme";Тема оформления: dark
$result = pg_query($conn, "SELECT name, age FROM users");
while (pg_fetch_row($result)) {
$name = pg_fetch_result($result, 'name'); // Без указания строки
$age = pg_fetch_result($result, 'age');
echo "$name ($age лет)\n";
}Иван (25 лет) Мария (30 лет) Петр (28 лет)