Pg fetch array: примеры (PHP)
pg_fetch_array(PgSql\Result $result, ?int $row = null, int $mode = PGSQL_BOTH): array|falseОписание функции pg_fetch_array
Функция pg_fetch_array используется для получения строки результата запроса к базе данных PostgreSQL в виде массива. Эта функция применяется после выполнения запросов с помощью pg_query или подобных функций для последовательного чтения данных.
- result - обязательный ресурс результата запроса, возвращаемый функцией
pg_query. - row - необязательный целочисленный параметр, указывающий номер извлекаемой строки. Если не указан, функция возвращает следующую строку.
- result_type - необязательный параметр, определяющий тип возвращаемого массива. Принимает значения:
PGSQL_ASSOC(ассоциативный массив),PGSQL_NUM(индексированный массив),PGSQL_BOTH(оба типа одновременно, используется по умолчанию).
Короткие примеры использования
<?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
$result = pg_query($conn, "SELECT id, name FROM users");
while ($row = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo $row['id'] . ': ' . $row['name'] . "<br>";
}
pg_close($conn);
?>1: Иван Петров 2: Мария Сидорова 3: Алексей Иванов
<?php
$row = pg_fetch_array($result, 0, PGSQL_NUM);
echo $row[0]; // Выведет значение первого столбца
?>Похожие функции в PHP
Возвращает строку результата только в виде ассоциативного массива. Всегда эквивалентна pg_fetch_array с параметром PGSQL_ASSOC. Удобна для читаемости кода.
Возвращает строку результата только в виде индексированного массива. Аналогична pg_fetch_array с параметром PGSQL_NUM.
Возвращает строку результата в виде объекта. Позволяет обращаться к данным через оператор ->, что удобно в объектно-ориентированном стиле.
Аналоги в других языках
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
cur.execute("SELECT id, name FROM users")
rows = cur.fetchall() # Возвращает список кортежей
for row in rows:
print(f"{row[0]}: {row[1]}") # Доступ по индексу
cur.close()const { Client } = require('pg');
const client = new Client();
await client.connect();
const res = await client.query('SELECT id, name FROM users');
// Результат в виде массива объектов
res.rows.forEach(row => {
console.log(`${row.id}: ${row.name}`); // Доступ по имени поля
});// Вместо pg_fetch_array используется mysqli_fetch_array
$result = $mysqli->query("SELECT id, name FROM users");
while ($row = $result->fetch_array(MYSQLI_BOTH)) {
echo $row['id'] . ': ' . $row[1];
}Типичные ошибки
$row = pg_fetch_array($result, 0, 5); // Неверный тип
var_dump($row);bool(false)
while ($row = pg_fetch_array($result)) {
// Обработка
}
$extra_row = pg_fetch_array($result); // false
if (!$extra_row) {
echo "Данных больше нет";
}pg_close($conn);
$row = pg_fetch_array($result); // ПредупреждениеИзменения в последних версиях PHP
Начиная с PHP 8.1, параметр row может принимать значение null для указания следующей строки, что делает поведение более явным. В PHP 8.0 улучшена обработка ошибок при неверных типах аргументов.
Расширенные примеры
<?php
// Использование курсора для эффективной обработки
$conn = pg_connect("...");
pg_query($conn, "BEGIN");
pg_query($conn, "DECLARE cur CURSOR FOR SELECT * FROM large_table");
while ($row = pg_fetch_array(pg_query($conn, "FETCH 100 FROM cur"), null, PGSQL_ASSOC)) {
// Пакетная обработка по 100 строк
process_batch($row);
}
pg_query($conn, "CLOSE cur");
pg_query($conn, "COMMIT");
?><?php
$result = pg_query($conn, "SELECT id, name, created_at FROM users");
$first_row = pg_fetch_array($result, 0, PGSQL_BOTH);
// Доступ к данным разными способами
echo $first_row['id']; // По имени
еcho $first_row[0]; // По индексу
echo $first_row['name'];
echo $first_row[1];
?><?php
// Возврат к определенной строке
pg_result_seek($result, 2); // Переход к третьей строке
$row = pg_fetch_array($result);
echo "Третья строка: " . $row['name'];
?><?php
$row = pg_fetch_array($result);
if ($row['optional_field'] === null) {
echo "Поле не заполнено";
} else {
echo htmlspecialchars($row['optional_field']);
}
?>