Pg close: примеры (PHP)
pg_close(?PgSql\Connection $connection = null): boolФункция pg_close в PHP
Функция pg_close() закрывает непостоянное соединение с базой данных PostgreSQL. Эта функция освобождает ресурсы, связанные с соединением.
Функция применяется для явного закрытия соединения с базой данных, когда оно больше не требуется. В типичном сценарии соединение автоматически закрывается при завершении скрипта, но использование pg_close() позволяет освободить ресурсы раньше.
Функция принимает один необязательный аргумент:
- $connection (ресурс) - ресурс соединения с PostgreSQL. Если аргумент не указан, используется последнее открытое соединение.
Примеры использования pg_close
<?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
// Работа с базой данных
pg_close($conn);
echo 'Соединение закрыто';
?>Соединение закрыто
<?php
$conn1 = pg_connect("host=localhost dbname=test1 user=postgres");
$conn2 = pg_connect("host=localhost dbname=test2 user=postgres");
// Закрывает $conn2, так как это последнее соединение
pg_close();
// $conn1 остается открытым
?><?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
pg_close($conn);
// Повторное закрытие
var_dump(pg_close($conn));
?>bool(false)
Альтернативные функции в PHP
Соединение закрывается автоматически при завершении работы скрипта. Явный вызов pg_close() не обязателен, но рекомендуется для управления ресурсами.
Принудительное создание нового соединения даже с идентичными параметрами. Не закрывает предыдущие соединения явно, но позволяет работать с несколькими соединениями одновременно.
Расширение PDO использует объектно-ориентированный подход. Закрытие соединения происходит при уничтожении объекта PDO или через установку значения null переменной, содержащей объект.
<?php
$pdo = new PDO('pgsql:host=localhost;dbname=test', 'postgres');
// Работа с базой данных
$pdo = null; // Соединение закрывается
?>Аналоги в других языках
import psycopg2
conn = psycopg2.connect("host=localhost dbname=test user=postgres")
# Работа с базой данных
conn.close() # Явное закрытиеconst { Client } = require('pg');
const client = new Client({
host: 'localhost',
database: 'test',
user: 'postgres'
});
await client.connect();
// Работа с базой данных
await client.end(); // Асинхронное закрытиеConnection conn = DriverManager.getConnection(
"jdbc:postgresql://localhost/test", "postgres", "");
// Работа с базой данных
conn.close(); // Явное закрытие<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// Работа с базой данных
$mysqli->close(); // Метод close() объекта
?>Типичные ошибки
<?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
pg_close($conn);
// Дальнейшие операции с закрытым соединением
$result = pg_query($conn, "SELECT 1");
var_dump($result);
?>bool(false)
<?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
pg_close($conn);
if (!pg_connection_status($conn)) {
echo 'Соединение активно';
} else {
echo 'Соединение закрыто';
}
?>Warning: pg_connection_status() expects parameter 1 to be resource, bool given
<?php
pg_close('not_a_connection');
?>Warning: pg_close() expects parameter 1 to be resource, string given
Изменения в версиях PHP
Функция теперь выбрасывает ошибку типа TypeError, если параметр $connection имеет неверный тип. В предыдущих версиях это вызывало предупреждение.
В ранних версиях PHP функция всегда возвращала true при успешном закрытии. Сейчас возвращает true только если соединение было действительно открыто и успешно закрыто, иначе false.
Расширенные примеры
<?php
$conn = pg_connect("host=localhost dbname=test user=postgres");
try {
$result = pg_query($conn, "SELECT * FROM non_existent_table");
if (!$result) {
throw new Exception('Ошибка запроса');
}
} catch (Exception $e) {
echo 'Ошибка: ' . $e->getMessage();
pg_close($conn); // Гарантированное закрытие при ошибке
exit;
}
pg_close($conn);
?><?php
$conn1 = pg_connect("host=localhost dbname=db1 user=postgres");
$conn2 = pg_connect("host=localhost dbname=db2 user=postgres");
// Закрытие конкретного соединения
pg_close($conn1);
// Проверка статуса
echo 'Соединение 1: ' . (pg_connection_status($conn1) === PGSQL_CONNECTION_OK ? 'Открыто' : 'Закрыто');
echo '\nСоединение 2: ' . (pg_connection_status($conn2) === PGSQL_CONNECTION_OK ? 'Открыто' : 'Закрыто');
pg_close($conn2);
?>Соединение 1: Закрыто Соединение 2: Открыто
<?php
function db_query_with_close($sql) {
static $conn = null;
if ($conn === null) {
$conn = pg_connect("host=localhost dbname=test user=postgres");
}
$result = pg_query($conn, $sql);
// Закрытие после каждого запроса (не рекомендуется для частых запросов)
pg_close($conn);
$conn = null;
return $result;
}
$result = db_query_with_close("SELECT version()");
$row = pg_fetch_row($result);
echo $row[0];
?>