Pg port: примеры (PHP)

Использование pg_port для определения порта в PostgreSQL
Раздел: Базы данных (PostgreSQL)
pg_port(?PgSql\Connection $connection = null): int

Функция pg_port в PHP возвращает номер порта, связанный с заданным соединением PostgreSQL. Она принадлежит к семейству функций расширения PgSQL и используется для получения метаданных активного подключения к базе данных.

Назначение и сфера применения

Функция применяется для отладки, логирования информации о подключении или построения динамических конфигураций, когда номер порта сервера базы данных неизвестен заранее или может изменяться. Это полезно в средах с репликацией или при работе с несколькими серверами БД.

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

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

  • connection (ресурс PostgreSQL) - Идентификатор соединения с базой данных, возвращаемый функциями pg_connect() или pg_pconnect(). Если аргумент не передан, используется последнее открытое по умолчанию соединение.

Примеры использования

Базовое использование

Получение номера порта для текущего соединения.

<?php
$conn = pg_connect("host=localhost port=5432 dbname=test user=postgres password=secret");
$port = pg_port($conn);
echo "Номер порта подключения: " . $port;
?>
Номер порта подключения: 5432
Использование без явного указания соединения

Если в сценарии только одно активное соединение, его можно не указывать.

<?php
pg_connect("host=example.com port=6543 dbname=mydb");
$port = pg_port(); // Используется последнее соединение
echo $port;
?>
6543

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

Для получения других параметров подключения к PostgreSQL существуют следующие функции:

  • pg_host() - Возвращает имя хоста, связанное с соединением.
  • pg_dbname() - Возвращает имя базы данных, связанное с соединением.
  • pg_options() - Возвращает параметры командной строки, используемые для установки соединения.

Функция pg_port является узкоспециализированной для получения номера порта. Для комплексной диагностики соединения ее используют вместе с другими перечисленными функциями.

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

Неверный или несуществующий ресурс соединения

Передача некорректного ресурса приводит к предупреждению и возврату false.

<?php
$fake_conn = null;
$port = pg_port($fake_conn);
var_dump($port);
?>
Warning: pg_port() expects parameter 1 to be resource, null given
bool(false)
Использование после закрытия соединения

Попытка получить порт для закрытого соединения также может вызвать ошибку.

<?php
$conn = pg_connect("host=localhost port=5432");
pg_close($conn);
$port = pg_port($conn); // Ресурс больше не действителен
?>
Warning: pg_port(): supplied resource is not a valid PostgreSQL link resource

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

Поведение функции pg_port остается стабильным на протяжении многих версий PHP, включая PHP 8. Не было зафиксировано значимых изменений в ее работе, сигнатуре или возвращаемых значениях с момента ее введения.

Начиная с PHP 8.0, в случае нарушения типизации (например, передача массива вместо ресурса/объекта) будет генерироваться исключение TypeError, а не предупреждение.

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

Использование в классе для управления подключением

Функция может интегрироваться в класс-обертку для соединения с БД.

Пример php
<?php
class DBConnection {
    private $conn;
    public function __construct($connectionString) {
        $this->conn = pg_connect($connectionString);
    }
    public function getConnectionInfo() {
        return [
            'host' => pg_host($this->conn),
            'port' => pg_port($this->conn),
            'dbname' => pg_dbname($this->conn)
        ];
    }
}
$db = new DBConnection("host=localhost port=5433 dbname=app_db");
print_r($db->getConnectionInfo());
?>
Array
(
    [host] => localhost
    [port] => 5433
    [dbname] => app_db
)
Сравнение портов при работе с несколькими соединениями
Пример php
<?php
$conn1 = pg_connect("host=db1.local port=5432");
$conn2 = pg_connect("host=db2.local port=5433");
if(pg_port($conn1) === pg_port($conn2)) {
    echo "Порты идентичны";
} else {
    echo "Порты разные: " . pg_port($conn1) . " и " . pg_port($conn2);
}
?>
Порты разные: 5432 и 5433

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

Python (библиотека psycopg2)

Аналогом является атрибут .port у объекта соединения.

import psycopg2
conn = psycopg2.connect(host="localhost", port=5432, database="test")
print(conn.port)  # Прямой доступ к атрибуту
conn.close()
5432
Node.js (библиотека pg)

Информация о порте доступна в свойствах объекта клиента или конфигурации.

const { Client } = require('pg');
const client = new Client({ host: 'localhost', port: 5432 });
console.log(client.connectionParameters.port); // Доступ к параметру
await client.connect();
5432

Pg port в MySQL

В MySQL аналогом служит функция PORT() в SQL-запросе, возвращающая порт для текущего соединения сервера.

SELECT PORT();
3306

В отличие от PHP, где pg_port работает на уровне драйвера, в MySQL это делается через SQL-запрос.

PHP pg_port function comments

En
Pg port Return the port number associated with the connection