Використання PHP-розширення для PostgreSQL (pgsql, PDO_PGSQL) у ServBay
ServBay — це потужне інтегроване локальне середовище веб-розробки, яке містить підтримку бази даних PostgreSQL і надає всі необхідні PHP-розширення, щоб розробники могли легко підключатися та працювати з PostgreSQL у своїх PHP-додатках. ServBay попередньо встановлює та автоматично активує розширення pgsql
та PDO_PGSQL
для всіх підтримуваних версій PHP.
Огляд PHP-розширень для PostgreSQL
PostgreSQL — це потужна база даних з відкритим кодом, відома своєю стабільністю, цілісністю даних та широкими можливостями. Для взаємодії PHP із PostgreSQL потрібні відповідні PHP-розширення. У ServBay основними є такі розширення:
- Розширення
pgsql
: це нативне розширення PHP для роботи з PostgreSQL, яке надає набір функцій із префіксомpg_
(наприклад,pg_connect
,pg_query
,pg_fetch_assoc
тощо) для прямої роботи з PostgreSQL. Це дозволяє розробникам використовувати специфічні функціональні можливості PostgreSQL. - Драйвер
PDO_PGSQL
: це частина розширення PHP Data Objects (PDO), спеціально для підключення до PostgreSQL. PDO забезпечує універсальний абстрактний шар для роботи з різними базами даних (PostgreSQL, MySQL, SQLite та ін.), що полегшує написання портованого коду.
PHP-розширення для 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 адмінером або зовнішніми інструментами керування базами (DBeaver, pgAdmin тощо).
Ось приклади підключення до бази й виконання базових операцій двома різними способами:
Приклад коду (через розширення pgsql
)
php
<?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);
?>
1
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
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
<?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; // За необхідності можна явно закрити
?>
1
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
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/
). Потім відкрийте відповідний URL у браузері (наприклад, http://myproject.servbay.demo/pg_test_native.php
). Переконайтеся, що ваш сайт і служба PostgreSQL у ServBay налаштовані й працюють.
Поширені запитання (FAQ)
Q: Чи потрібно мені вручну встановлювати розширення PHP для PostgreSQL (pgsql
чи PDO_PGSQL
) у ServBay?
A: Ні, не потрібно. Усі версії PHP у ServBay вже мають встановлені та активовані за замовчуванням розширення pgsql
та драйвер PDO_PGSQL
. Можна одразу використовувати їх у коді без додаткової інсталяції чи налаштування.
Q: Чим відрізняються розширення pgsql
і драйвер PDO_PGSQL
? Що краще використовувати?
A:
pgsql
— це набір функцій PHP, специфічних для PostgreSQL (наприклад,pg_connect
,pg_query_params
). Зручний, якщо потрібна робота з особливостями PostgreSQL.PDO_PGSQL
— частина абстрактного шару PDO, що уніфікує роботу з різними базами даних. Краще підходить для створення кросплатформного/портованого коду, а також забезпечує безпечну роботу з переданими даними через використання підготовлених запитів.- Рекомендація: для нових проектів або там, де важлива безпека й переносимість, допускається використовувати
PDO_PGSQL
. Для підтримки старих проектів або специфічних функцій можна скористатисяpgsql
.
Q: Де знайти параметри підключення до служби PostgreSQL у ServBay (хост, порт, логін, пароль, база даних)?
A:
- Хост (Host): зазвичай це
127.0.0.1
абоlocalhost
. - Порт (Port): стандартний порт PostgreSQL —
5432
. Поточний порт можна переглянути у менеджері пакетів PostgreSQL у ServBay. - Ім’я користувача/пароль/база даних: ці облікові записи ви створюєте самостійно через адмінер ServBay або сторонні клієнти для PostgreSQL (наприклад, pgAdmin, DBeaver).
Q: Як захиститися від SQL-інʼєкцій при використанні розширення pgsql
?
A: Ніколи не зʼєднуйте користувацькі дані напряму в рядках SQL-запитів. Користуйтеся функцією pg_query_params()
для параметризованих запитів — вона передає запит і дані окремо та гарантує захист. Або, якщо користуєтеся pg_query()
, перед додаванням даних застосовуйте pg_escape_string()
чи pg_escape_literal()
, але все ж pg_query_params()
кращий і безпечніший вибір.
Висновок
ServBay, завдяки попередньому встановленню й автоматичній активації PHP-розширень pgsql
та PDO_PGSQL
, значно спрощує процес підключення до PostgreSQL у локальному середовищі macOS. Розробникам не доводиться турбуватися про встановлення чи налаштування розширень — вони можуть обрати найбільш відповідний варіант для свого проекту (рекомендується PDO для кращої безпеки та сумісності), і одразу працювати з PostgreSQL у ServBay. Це дозволяє зосередитися на логіці додатка й максимально ефективно використовувати переваги можливостей PostgreSQL у розробці надійних веб-додатків.