Pg num fields: примеры (PHP)

Определение количества полей в PostgreSQL результатах через pg_num_fields
Раздел: Базы данных (PostgreSQL)
pg_num_fields(PgSql\Result $result): int

Функция pg_num_fields в PHP

Назначение и описание

pg_num_fields возвращает количество полей (столбцов) в результате запроса PostgreSQL. Функция применяется для анализа структуры полученных данных после выполнения SQL-запросов командой SELECT или SHOW.

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

Функция принимает один обязательный аргумент:

  • $result (ресурс) — дескриптор результата запроса, возвращаемый функциями pg_query, pg_query_params или pg_execute.

Краткие примеры использования

Базовое применение

Пример с простым запросом к таблице:

<?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
$result = pg_query($conn, "SELECT id, name, age FROM users");
echo pg_num_fields($result); // Выведет количество столбцов
?>
3
Запрос без данных

Обработка пустого результата:

<?php
$result = pg_query($conn, "SELECT * FROM users WHERE 1=0");
echo pg_num_fields($result); // Функция работает даже при отсутствии строк
?>
3

Похожие функции в PHP

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

Получает название конкретного поля по его индексу. Применяется вместе с pg_num_fields для перебора столбцов.

Определяет тип данных указанного поля. Полезно при динамическом построении запросов на основе структуры таблицы.

Типичные ошибки

Передача некорректного ресурса

Использование несуществующего или закрытого соединения приводит к ошибке:

<?php
$result = null;
echo pg_num_fields($result);
?>
Warning: pg_num_fields() expects parameter 1 to be resource, null given
Запрос без выборки данных

При выполнении команд INSERT или UPDATE функция вернет 0:

<?php
$result = pg_query($conn, "UPDATE users SET age=25 WHERE id=1");
echo pg_num_fields($result);
?>
0

Изменения в версиях PHP

Функция pg_num_fields не претерпела значимых изменений с PHP 5 до PHP 8. В PHP 8.1 улучшена обработка типов аргументов, что позволяет более строго контролировать передаваемые значения.

Расширенные примеры

Динамическое построение таблицы

Автоматическое создание HTML-таблицы на основе структуры запроса:

Пример php
<?php
$result = pg_query($conn, "SELECT * FROM products LIMIT 5");
$fieldCount = pg_num_fields($result);
echo '<table>';
echo '<tr>';
for ($i = 0; $i < $fieldCount; $i++) {
    echo '<th>' . htmlspecialchars(pg_field_name($result, $i)) . '</th>';
}
echo '</tr>';
while ($row = pg_fetch_row($result)) {
    echo '<tr>';
    for ($i = 0; $i < $fieldCount; $i++) {
        echo '<td>' . htmlspecialchars($row[$i]) . '</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>
Анализ сложных запросов

Обработка запросов с вычисляемыми полями и объединениями таблиц:

Пример php
<?php
$query = "SELECT u.id, u.name, COUNT(o.id) as order_count ".
         "FROM users u LEFT JOIN orders o ON u.id = o.user_id ".
         "GROUP BY u.id, u.name";
$result = pg_query($conn, $query);
$fields = pg_num_fields($result);
for ($i = 0; $i < $fields; $i++) {
    printf("Поле %d: %s (%s)\n", 
        $i, 
        pg_field_name($result, $i),
        pg_field_type($result, $i)
    );
}
?>

Аналоги в других языках

Python (psycopg2)

Свойство description курсора содержит информацию о столбцах:

import psycopg2
conn = psycopg2.connect("dbname=test")
cur = conn.cursor()
cur.execute("SELECT id, name FROM users")
print(len(cur.description))
2
JavaScript (node-postgres)

Метаданные результата доступны через свойство fields:

const result = await client.query('SELECT * FROM users');
console.log(result.fields.length);
MySQL (PHP)

Функция mysqli_field_count выполняет похожую задачу для расширения MySQLi.

PHP pg_num_fields function comments

En
Pg num fields Returns the number of fields in a result