Menggunakan Ekstensi PHP PostgreSQL (pgsql, PDO_PGSQL) di ServBay
ServBay adalah lingkungan pengembangan web lokal terintegrasi yang kuat, yang hadir dengan dukungan bawaan untuk database PostgreSQL serta menyediakan ekstensi PHP yang diperlukan. Ini memungkinkan para pengembang untuk terhubung dan mengelola database PostgreSQL dengan mudah di dalam aplikasi PHP mereka. Semua versi PHP yang didukung oleh ServBay telah dipra-instal dan diaktifkan secara default untuk ekstensi pgsql
dan PDO_PGSQL
.
Sekilas Tentang Ekstensi PHP PostgreSQL
PostgreSQL adalah sistem database relasional objek open source yang terkenal karena kestabilan, integritas data, dan fiturnya yang kaya. Untuk dapat berinteraksi dengan PostgreSQL melalui PHP, Anda membutuhkan ekstensi yang sesuai. ServBay menghadirkan dua ekstensi utama:
- Ekstensi
pgsql
: Ekstensi asli PHP untuk PostgreSQL ini menyediakan serangkaian fungsi yang diawali denganpg_
(sepertipg_connect
,pg_query
,pg_fetch_assoc
, dan lainnya) yang memungkinkan manipulasi PostgreSQL secara langsung dan memanfaatkan fitur spesifikasi database ini. - Driver
PDO_PGSQL
: Merupakan bagian dari ekstensi PHP Data Objects (PDO) yang dikhususkan untuk koneksi ke PostgreSQL. PDO menyediakan lapisan abstraksi akses database yang konsisten, sehingga Anda dapat menggunakan satu API untuk berbagai jenis database (PostgreSQL, MySQL, SQLite, dll), cocok untuk kode yang ingin dipindahkan antar-database dengan mudah.
Ekstensi PHP PostgreSQL di ServBay
ServBay telah memudahkan dengan memasang ekstensi pgsql
dan driver PDO_PGSQL
untuk setiap versi PHP yang didukung, dan memastikan ekstensi tersebut diaktifkan secara default.
Cara Mengaktifkan Ekstensi PostgreSQL
Di ServBay, Anda TIDAK perlu melakukan pengaktifan manual terhadap ekstensi pgsql
maupun PDO_PGSQL
. Semuanya sudah siap digunakan dan dapat langsung diakses melalui kode PHP Anda.
Menggunakan PostgreSQL dalam Kode PHP
Setelah ekstensi diaktifkan, Anda bisa langsung menggunakan fungsi pgsql
atau objek PDO untuk menghubungkan serta mengelola database PostgreSQL.
Prasyarat:
- Pastikan layanan PostgreSQL berjalan di ServBay.
- Misalkan Anda telah membuat database bernama
servbay_db
. - Misalkan Anda telah membuat user
servbay_user
dengan passwordyour_password
, serta telah memberikan hak istimewa yang sesuai padaservbay_db
. - Misalkan ada tabel
users
di databaseservbay_db
dengan kolomid
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR), danage
(INT).
Anda dapat menggunakan adminer bawaan ServBay atau alat manajemen database lain (seperti DBeaver, pgAdmin) untuk melakukan pengaturan ini.
Berikut contoh kode untuk menghubungkan database dan melakukan operasi dasar dengan kedua metode:
Contoh Kode (Menggunakan Ekstensi pgsql
)
php
<?php
// --- Contoh ekstensi pgsql ---
// Parameter koneksi database
$host = "127.0.0.1"; // atau 'localhost'
$port = "5432"; // Port default PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Silakan ganti dengan password Anda
// Membuat string koneksi
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Koneksi ke database PostgreSQL
$conn = pg_connect($conn_string);
// Periksa apakah koneksi berhasil
if (!$conn) {
die("pgsql Connection failed: " . pg_last_error());
}
echo "pgsql Connected successfully<br>";
// Insert data (Catatan: pg_query tidak langsung mendukung parameter binding, Anda perlu melakukan escape manual lindungi dari injeksi SQL, atau gunakan pg_query_params)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// Menggunakan pg_query_params untuk query parameter yang aman
$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 data
$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>";
// Periksa apakah ada baris hasil
if (pg_num_rows($result) > 0) {
// Ambil semua baris sebagai array asosiatif
$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>";
}
// Tutup koneksi database
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
Contoh Kode (Menggunakan PDO_PGSQL
)
php
<?php
// --- Contoh PDO_PGSQL ---
// Parameter koneksi database
$host = '127.0.0.1'; // atau 'localhost'
$port = 5432; // Port default PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Silakan ganti dengan password Anda
// Data Source Name (DSN) untuk PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// Opsi koneksi PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Lempar exception, bukan warning
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Mode pengambilan data default adalah array asosiatif
// PDO::ATTR_EMULATE_PREPARES => false, // Biasanya tidak wajib untuk PostgreSQL
];
try {
// Buat instance koneksi PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Connected successfully<br>";
// Insert data (menggunakan prepared statement)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// Bind parameter dan eksekusi
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: New record created successfully<br>";
// Query data
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Ambil semua hasil
$users = $stmt->fetchAll(); // Menggunakan 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) {
// Tangkap dan tampilkan error koneksi atau query
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// Koneksi PDO biasanya tertutup otomatis di akhir skrip, tidak perlu memanggil close()
// $pdo = null; // Jika ingin menutup koneksi secara eksplisit
?>
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
Cara Menempatkan Kode: Simpan salah satu contoh kode di atas sebagai file .php
(misal pg_test_native.php
atau pg_test_pdo.php
) dan tempatkan di folder root website ServBay Anda (misal di /Applications/ServBay/www/myproject/
). Setelah itu, akses melalui browser ke URL yang sesuai (misal http://myproject.servbay.demo/pg_test_native.php
). Pastikan website dan layanan PostgreSQL di ServBay sudah dikonfigurasi serta berjalan dengan benar.
Pertanyaan yang Sering Diajukan (FAQ)
T: Apakah saya perlu menginstal ekstensi PHP PostgreSQL (pgsql
atau PDO_PGSQL
) secara manual di ServBay?
J: Tidak perlu. ServBay sudah memasang dan mengaktifkan kedua ekstensi (pgsql
dan PDO_PGSQL
) untuk semua versi PHP yang dikelola. Anda dapat langsung menggunakannya di kode Anda tanpa instalasi atau konfigurasi tambahan.
T: Apa perbedaan antara ekstensi pgsql
dan driver PDO_PGSQL
? Yang mana pilihan terbaik untuk saya?
J:
- Ekstensi
pgsql
menyediakan kumpulan fungsi spesifik PostgreSQL (misalpg_connect
,pg_query_params
). Cocok jika Anda ingin memanfaatkan fitur unik dari PostgreSQL secara langsung. PDO_PGSQL
adalah bagian dari lapisan abstraksi PDO. Menggunakan PDO membuat kode database lebih portabel; jika Anda berniat migrasi ke database lain di masa mendatang (MySQL, dll), perubahan kode lebih minim. PDO juga mewajibkan penggunaan prepared statement, yang merupakan praktik aman dalam pengembangan PHP modern.- Rekomendasi: Untuk proyek baru atau yang mengutamakan portabilitas dan keamanan kode, disarankan menggunakan
PDO_PGSQL
. Untuk proyek lama atau jika butuh fungsipgsql
tertentu, Anda bisa memilih ekstensipgsql
.
T: Bagaimana cara mendapatkan informasi yang diperlukan (host, port, user, password, nama database) untuk terhubung ke layanan PostgreSQL ServBay?
J:
- Host: Biasanya
127.0.0.1
ataulocalhost
. - Port: Port standar PostgreSQL adalah
5432
. Anda bisa mengecek port yang aktif di halaman pengelolaan PostgreSQL pada ServBay. - Username / Password / Database Name: Data ini dibuat pada layanan PostgreSQL Anda. Untuk membuatnya, gunakan adminer bawaan ServBay atau aplikasi klien PostgreSQL lain seperti pgAdmin atau DBeaver.
T: Bagaimana cara mencegah SQL Injection saat menggunakan ekstensi pgsql
?
J: Hindari menggabungkan input pengguna langsung ke dalam query SQL. Gunakan fungsi pg_query_params()
yang memisahkan query dan parameter maupun nilai input, sehingga penganan parameter aman dilakukan oleh driver. Atau, jika menggunakan pg_query()
, aplikasikan pg_escape_string()
atau pg_escape_literal()
pada setiap nilai input (meski pg_query_params
tetap menjadi pilihan yang lebih baik).
Kesimpulan
Dengan menyediakan ekstensi PHP pgsql
dan PDO_PGSQL
secara default dan terinstall otomatis, ServBay telah menyederhanakan proses koneksi dan penggunaan database PostgreSQL oleh PHP di lingkungan macOS lokal. Pengembang tidak perlu repot instal atau konfigurasi ekstensi secara manual, dan bisa langsung memilih ekstensi yang sesuai dengan kebutuhan proyeknya (disarankan menggunakan PDO untuk alasan kompatibilitas dan keamanan). ServBay memampukan pengembang untuk berfokus pada logika aplikasi dan membangun web apps yang andal, efisien, serta memanfaatkan fitur unggulan PostgreSQL secara maksimal.