Использование PHP расширения для PostgreSQL (pgsql, PDO_PGSQL) в ServBay
ServBay — это мощная локальная интегрированная среда для веб-разработки, которая содержит встроенную поддержку базы данных PostgreSQL и предоставляет необходимые PHP расширения, чтобы вы могли легко подключаться и работать с PostgreSQL в своих PHP-проектах. Для всех поддерживаемых версий PHP в ServBay расширения pgsql
и PDO_PGSQL
уже установлены и включены по умолчанию.
Краткий обзор PHP расширения PostgreSQL
PostgreSQL — это мощная объектно-реляционная СУБД с открытым исходным кодом, известная своей стабильностью, целостностью данных и обширным функционалом. Для взаимодействия с PostgreSQL в PHP используются соответствующие расширения. В ServBay доступны два основных варианта:
- Расширение
pgsql
: Является встроенным расширением PHP для работы с PostgreSQL и предоставляет набор функций, начинающихся сpg_
(например,pg_connect
,pg_query
,pg_fetch_assoc
и др.), позволяя использовать специфические возможности PostgreSQL. - Драйвер
PDO_PGSQL
: Входит в состав абстракции PHP Data Objects (PDO) и предназначен для подключения к PostgreSQL. PDO обеспечивает единый слой доступа ко многим СУБД, таким как PostgreSQL, MySQL, SQLite и др., что способствует написанию более переносимого кода.
Расширения PostgreSQL в ServBay
ServBay заботится о разработчиках, поэтому для каждой поддерживаемой версии PHP расширения pgsql
и PDO_PGSQL
уже предустановлены и активированы по умолчанию.
Как включить расширение PostgreSQL
В ServBay вам не нужно выполнять никаких дополнительных действий для активации pgsql
или PDO_PGSQL
— они настроены и готовы к использованию в вашем PHP-коде.
Использование PostgreSQL в PHP коде
С нужными расширениями вы можете использовать функции pgsql
или объект PDO для подключения и взаимодействия с PostgreSQL из PHP.
Предварительные требования:
- Запущена служба PostgreSQL в ServBay.
- Вы создали базу данных с именем
servbay_db
. - Создан пользователь
servbay_user
с паролемyour_password
и предоставлены нужные права на базуservbay_db
. - В базе
servbay_db
имеется таблицаusers
со столбцами:id
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR),age
(INT).
Эти шаги можно выполнить при помощи встроенного в ServBay adminer или других инструментов для работы с БД (например, DBeaver, pgAdmin).
Ниже приведены примеры кода для подключения к базе и выполнения базовых операций двумя разными способами:
Пример кода (расширение pgsql
)
<?php
// --- Пример для расширения pgsql ---
// Параметры подключения к БД
$host = "127.0.0.1"; // или 'localhost'
$port = "5432"; // Стандартный порт PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Замените на ваш фактический пароль
// Формируем строку подключения
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Подключаемся к PostgreSQL
$conn = pg_connect($conn_string);
// Проверяем, удалось ли подключение
if (!$conn) {
die("pgsql Connection failed: " . pg_last_error());
}
echo "pgsql Connected successfully<br>";
// Вставка записи (Внимание: pg_query напрямую не поддерживает привязку параметров, используйте pg_query_params для безопасности)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// Безопасный параметризованный запрос с pg_query_params
$query = "INSERT INTO users (name, email, age) VALUES ($1, $2, $3)";
$result = pg_query_params($conn, $query, array($name, $email, $age));
if ($result) {
echo "pgsql: New record created successfully<br>";
} else {
echo "pgsql Error: " . pg_last_error($conn) . "<br>";
}
// Запрос данных
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Queried data:<br>";
// Проверяем, есть ли строки в ответе
if (pg_num_rows($result) > 0) {
// Получаем все строки как ассоциативный массив
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 results found<br>";
}
} else {
echo "pgsql Error querying data: " . pg_last_error($conn) . "<br>";
}
// Закрываем соединение с БД
pg_close($conn);
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Пример кода (способ через PDO_PGSQL
)
<?php
// --- Пример для PDO_PGSQL ---
// Параметры подключения к БД
$host = '127.0.0.1'; // или 'localhost'
$port = 5432; // Стандартный порт PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Замените на ваш фактический пароль
// DSN для PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// Опции подключения PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Выбрасывать исключения при ошибках
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Получать результаты как ассоциативный массив
// PDO::ATTR_EMULATE_PREPARES => false, // Для PostgreSQL обычно не требуется эта опция
];
try {
// Создаём PDO-экземпляр подключения
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Connected successfully<br>";
// Вставка записи (с помощью подготовленного запроса)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// Привязываем параметры и выполняем запрос
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: New record created successfully<br>";
// Запрос данных
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Получаем все результаты
$users = $stmt->fetchAll(); // Используем FETCH_ASSOC по умолчанию
if ($users) {
echo "PDO_PGSQL Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 results found<br>";
}
} catch (\PDOException $e) {
// Обработка и вывод ошибок подключения или запросов
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// PDO соединение обычно закрывается автоматически, когда скрипт завершается
// $pdo = null; // Можно явно закрыть соединение, установив null
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Сохранение кода: Сохраните любой из приведённых выше примеров в файл с расширением .php
(например, pg_test_native.php
или pg_test_pdo.php
) и разместите его в корневом каталоге вашего сайта в ServBay (например, /Applications/ServBay/www/myproject/
). Затем откройте этот файл в браузере по адресу типа http://myproject.servbay.demo/pg_test_native.php
. Убедитесь, что ваш сайт и служба PostgreSQL в ServBay запущены и настроены корректно.
Часто задаваемые вопросы (FAQ)
В: Нужно ли вручную устанавливать расширения PHP для PostgreSQL (pgsql
или PDO_PGSQL
) в ServBay?
О: Нет, не нужно. В ServBay все поддерживаемые версии PHP уже содержат и активируют расширения pgsql
и PDO_PGSQL
по умолчанию. Вы можете использовать их в коде без дополнительных установок и настроек.
В: Чем отличаются расширения pgsql
и PDO_PGSQL
? Какое выбрать?
О:
- Расширение
pgsql
предлагает набор функций, ориентированных на PostgreSQL (например,pg_connect
,pg_query_params
). Если вам нужны специальные возможности PostgreSQL, оно может подойти больше. PDO_PGSQL
— это часть абстрактного слоя PDO. Его использование облегчает переносимость кода между различными СУБД (например, если потребуется перейти на MySQL). Также PDO всегда использует подготовленные запросы, что более безопасно и рекомендуется для современного PHP.- Рекомендация: для новых проектов, а также если важны переносимость и безопасность — рекомендуется использовать
PDO_PGSQL
. Для поддержки старых проектов или работы со специфичными функциями PostgreSQL можно выбиратьpgsql
.
В: Где взять параметры подключения к PostgreSQL в ServBay (хост, порт, пользователь, пароль, база данных)?
О:
- Хост (Host): Обычно это
127.0.0.1
илиlocalhost
. - Порт (Port): Стандартный порт PostgreSQL —
5432
. Фактический порт можно посмотреть в настройках PostgreSQL внутри интерфейса управления ServBay. - Пользователь (Username) / Пароль (Password) / Имя базы (Database Name): Эти данные вы создаёте сами в службе PostgreSQL. Создать БД, пользователя и назначить права можно в adminer ServBay либо через инструменты PostgreSQL (pgAdmin, DBeaver и др.).
В: Как защититься от SQL-инъекций при использовании расширения pgsql
?
О: Не вставляйте ввод пользователя напрямую в SQL-запросы. Используйте функцию pg_query_params()
, которая разделяет query и параметры — параметры обрабатываются драйвером безопасно. Альтернативно, перед использованием в pg_query()
экранируйте данные функциями pg_escape_string()
или pg_escape_literal()
(но предпочтительнее всё-таки применять pg_query_params
).
Заключение
ServBay максимально упрощает процесс подключения PHP к PostgreSQL на macOS за счёт предустановленных и активированных расширений pgsql
и PDO_PGSQL
. Разработчику не нужно заботиться об установке или настройке расширений — можно сразу подключать PostgreSQL и выбирать подходящий способ (рекомендуем — PDO ради переносимости и безопасности). Это позволяет сконцентрироваться на логике приложения и использовать все преимущества PostgreSQL для построения надёжных веб-систем.