Pg field is null: примеры (PHP)
pg_field_is_null(PgSql\Result $result, $row = ?, $field = ?): int|falseФункция pg_field_is_null в PHP используется для определения, содержит ли значение определенного поля в результате запроса к PostgreSQL значение NULL. Это важно при обработке данных, полученных из базы данных, где необходимо отличать NULL от других значений, включая пустые строки или нули.
Функция используется после выполнения запроса с помощью pg_query или подобных функций, когда нужно проверить отдельные значения в строке результата на NULL.
- $result (ресурс) - обязательный аргумент. Ресурс результата запроса PostgreSQL, возвращаемый функциями pg_query, pg_query_params или pg_execute.
- $row (int) - обязательный аргумент. Номер строки в результате запроса. Нумерация начинается с 0.
- $field (string|int) - обязательный аргумент. Может быть строкой (имя поля) или целым числом (номер поля, начиная с 0).
Возвращает 1, если значение поля равно NULL, 0 если не NULL, и -1 в случае ошибки.
Рассмотрим несколько вариантов вызова функции с разными типами аргументов.
$conn = pg_connect("host=localhost dbname=test user=postgres");
$result = pg_query($conn, "SELECT id, name, value FROM items");
$row = 0;
// Проверяем второе поле (name) в первой строке
$isNull = pg_field_is_null($result, $row, 1);
echo "Результат: ";
var_dump($isNull);Результат: int(0) // если поле не NULL
$isNull = pg_field_is_null($result, 2, 'value');
echo "Результат: ";
var_dump($isNull);Результат: int(1) // если поле содержит NULL
$isNull = pg_field_is_null($result, 100, 'nonexistent');
echo "Результат: ";
var_dump($isNull);Результат: int(-1) // ошибка, неверный номер строки или имя поля
- pg_fetch_result - возвращает значение поля, при этом NULL возвращается как NULL. Позволяет получать значения без дополнительной проверки на NULL, но требует последующего сравнения с помощью is_null.
- pg_fetch_assoc/pg_fetch_row - возвращают всю строку в виде массива. Для проверки на NULL нужно использовать is_null для конкретного элемента массива.
- is_null - стандартная функция PHP для проверки переменной на NULL. Используется после получения значения из результата запроса.
Функцию pg_field_is_null предпочтительнее использовать, когда нужно проверить значение на NULL без извлечения самого значения, особенно при работе с большими результатами, чтобы избежать лишнего копирования данных.
В Python для работы с PostgreSQL часто используется библиотека psycopg2. Значение NULL представлено как None. Проверка выполняется стандартными средствами Python.
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
cur.execute("SELECT id, name FROM items")
row = cur.fetchone()
# Проверка второго поля на None (аналог NULL)
if row[1] is None:
print("Поле равно NULL")Поле равно NULL // если значение отсутствует
В JavaScript с библиотекой 'pg' значения NULL возвращаются как null. Проверка выполняется оператором строгого равенства.
const { Client } = require('pg');
const client = new Client();
await client.connect();
const res = await client.query('SELECT id, name FROM items');
const row = res.rows[0];
// Проверка поля name на null
if (row.name === null) {
console.log('Поле равно NULL');
}Поле равно NULL // если значение null
В PHP для MySQL существует функция mysqli_fetch_field_direct в сочетании с проверкой флага, но обычно значение NULL проверяется после получения строки с помощью is_null.
// Для MySQLi
$result = $mysqli->query("SELECT id, name FROM items");
$row = $result->fetch_assoc();
if (is_null($row['name'])) {
echo 'Поле равно NULL';
}Поле равно NULL
$result = pg_query($conn, "SELECT id FROM items");
// Передаем строку вместо числа для номера строки
$isNull = pg_field_is_null($result, 'string', 0);
echo "Результат: ";
var_dump($isNull);Результат: int(-1) // ошибка
$isNull = pg_field_is_null($result, 0, 'несуществующее_поле');
echo "Результат: ";
var_dump($isNull);Результат: int(-1) // ошибка
pg_free_result($result);
$isNull = pg_field_is_null($result, 0, 'id');
// Может вызвать предупреждение и вернуть -1Warning: pg_field_is_null(): supplied resource is not a valid PostgreSQL result resource
Начиная с PHP 8.0, функция выбрасывает исключение TypeError при передаче аргументов неверного типа, вместо предупреждений. В более ранних версиях (PHP 7.x) функция возвращала -1 и могла генерировать предупреждения.
// В PHP 8.0+
try {
pg_field_is_null('not_a_result', 0, 0);
} catch (TypeError $e) {
echo $e->getMessage();
}pg_field_is_null(): supplied resource is not a valid PostgreSQL result resource
$result = pg_query($conn, "SELECT id, name, description FROM items LIMIT 1");
$rowNum = 0;
$fieldCount = pg_num_fields($result);
for ($i = 0; $i < $fieldCount; $i++) {
$fieldName = pg_field_name($result, $i);
$isNull = pg_field_is_null($result, $rowNum, $i);
echo "Поле {$fieldName}: " . ($isNull === 1 ? 'NULL' : 'не NULL') . "\n";
}Поле id: не NULL Поле name: NULL Поле description: не NULL
// Получаем значение поля
$value = pg_fetch_result($result, 0, 'name');
// Проверяем разными способами
$viaFunction = pg_field_is_null($result, 0, 'name');
$viaIsNull = is_null($value);
echo "pg_field_is_null: {$viaFunction}, is_null: " . ($viaIsNull ? 'true' : 'false');pg_field_is_null: 1, is_null: true
$result = pg_query($conn, "SELECT * FROM items");
while ($row = pg_fetch_assoc($result)) {
// Используем pg_field_is_null для проверки конкретного поля в текущей строке
$currentRow = pg_result_seek($result, pg_num_rows($result) - 1); // переходим к текущей строке
$isNull = pg_field_is_null($result, pg_num_rows($result) - 1, 'price');
if ($isNull === 1) {
echo "Товар ID: {$row['id']} не имеет цены\n";
}
}Товар ID: 5 не имеет цены Товар ID: 8 не имеет цены