Pg port: примеры (PHP)
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
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
$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Аналоги в других языках программирования
Аналогом является атрибут .port у объекта соединения.
import psycopg2
conn = psycopg2.connect(host="localhost", port=5432, database="test")
print(conn.port) # Прямой доступ к атрибуту
conn.close()5432Информация о порте доступна в свойствах объекта клиента или конфигурации.
const { Client } = require('pg');
const client = new Client({ host: 'localhost', port: 5432 });
console.log(client.connectionParameters.port); // Доступ к параметру
await client.connect();5432Pg port в MySQL
В MySQL аналогом служит функция PORT() в SQL-запросе, возвращающая порт для текущего соединения сервера.
SELECT PORT();3306В отличие от PHP, где pg_port работает на уровне драйвера, в MySQL это делается через SQL-запрос.