Pg num fields: примеры (PHP)
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
$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
$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)
);
}
?>Аналоги в других языках
Свойство description курсора содержит информацию о столбцах:
import psycopg2
conn = psycopg2.connect("dbname=test")
cur = conn.cursor()
cur.execute("SELECT id, name FROM users")
print(len(cur.description))2
Метаданные результата доступны через свойство fields:
const result = await client.query('SELECT * FROM users');
console.log(result.fields.length);Функция mysqli_field_count выполняет похожую задачу для расширения MySQLi.