Menggunakan Ekstensi PHP PostgreSQL (pgsql, PDO_PGSQL) di ServBay
Sebagai lingkungan pengembangan web lokal terintegrasi yang kuat, ServBay sudah mendukung database PostgreSQL secara bawaan dan menyediakan ekstensi penting untuk PHP, sehingga developer dapat dengan mudah menghubungkan serta memanipulasi database PostgreSQL di aplikasi PHP mereka. Semua versi PHP yang didukung ServBay telah dipasang dan diaktifkan secara default dengan ekstensi pgsql
dan PDO_PGSQL
.
Pengantar Ekstensi PHP PostgreSQL
PostgreSQL adalah sistem database relasional objek open source yang sangat tangguh, dikenal karena stabilitas, integritas data, dan fitur-fiturnya yang kaya. Untuk berinteraksi dengan database PostgreSQL melalui PHP, Anda memerlukan ekstensi terkait. ServBay terutama menyediakan dua jenis ekstensi:
- Ekstensi
pgsql
: Merupakan ekstensi PostgreSQL asli untuk PHP, menyediakan serangkaian fungsi dengan awalanpg_
(sepertipg_connect
,pg_query
,pg_fetch_assoc
, dst) untuk langsung mengakses database PostgreSQL. Ekstensi ini memberi Anda akses penuh ke fitur khusus PostgreSQL. - Driver
PDO_PGSQL
: Bagian dari ekstensi PHP Data Objects (PDO), khusus untuk menghubungkan ke database PostgreSQL. PDO menawarkan lapisan abstraksi akses database yang seragam, sehingga Anda dapat menggunakan API konsisten untuk berbagai database (seperti PostgreSQL, MySQL, SQLite, dan lainnya), membuat kode Anda lebih portabel.
Ekstensi PHP PostgreSQL di ServBay
ServBay telah memasang sebelumnya ekstensi pgsql
dan driver PDO_PGSQL
pada setiap versi PHP yang didukung, serta memastikan keduanya telah diaktifkan secara default.
Cara Mengaktifkan Ekstensi PostgreSQL
Di ServBay, Anda tidak perlu melakukan langkah tambahan apa pun untuk mengaktifkan ekstensi pgsql
atau PDO_PGSQL
. Semuanya sudah dikonfigurasi, sehingga Anda bisa langsung digunakan di kode PHP.
Menggunakan PostgreSQL dalam Kode PHP
Setelah ekstensi diaktifkan, Anda bisa menggunakan fungsi pgsql
atau objek PDO di kode PHP untuk menghubungkan dan mengelola database PostgreSQL.
Prasyarat:
- Anda menjalankan layanan PostgreSQL pada ServBay.
- Misal, Anda telah membuat database bernama
servbay_db
. - Telah ada user bernama
servbay_user
dengan passwordyour_password
, dan sudah diberikan hak akses ke databaseservbay_db
. - Dalam database
servbay_db
terdapat tabel bernamausers
yang berisi kolomid
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR),age
(INT).
Anda dapat melakukan pengaturan tersebut menggunakan adminer bawaan ServBay atau tools manajemen database lain seperti DBeaver atau pgAdmin.
Berikut contoh kode untuk menghubungkan dan menjalankan operasi dasar database dengan kedua cara:
Contoh Kode (menggunakan ekstensi pgsql
)
php
<?php
// --- Contoh penggunaan 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 connection string
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Menghubungkan ke database PostgreSQL
$conn = pg_connect($conn_string);
// Cek apakah koneksi berhasil
if (!$conn) {
die("pgsql Koneksi gagal: " . pg_last_error());
}
echo "pgsql Berhasil terhubung<br>";
// Menyisipkan data (catatan: pg_query tidak mendukung binding parameter secara langsung, gunakan pg_query_params untuk keamanan dari injeksi SQL)
$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: Data baru berhasil ditambahkan<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 Data hasil query:<br>";
// Cek apakah ada hasil
if (pg_num_rows($result) > 0) {
// Mendapatkan seluruh baris sebagai array asosiasi
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Nama: " . $row["name"]. " - Email: " . $row["email"]. " - Umur: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 hasil ditemukan<br>";
}
} else {
echo "pgsql Error saat query data: " . pg_last_error($conn) . "<br>";
}
// Menutup 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 penggunaan 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 fetch default: array asosiasi
// PDO::ATTR_EMULATE_PREPARES => false, // Biasanya tidak perlu diaktifkan khusus untuk PostgreSQL
];
try {
// Membuat instance koneksi PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Berhasil terhubung<br>";
// Menyisipkan data (dengan 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: Data baru berhasil ditambahkan<br>";
// Query data
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Mendapatkan semua hasil
$users = $stmt->fetchAll(); // Default fetch mode: FETCH_ASSOC
if ($users) {
echo "PDO_PGSQL Data hasil query:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Nama: " . $row['name'] . " - Email: " . $row['email'] . " - Umur: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 hasil ditemukan<br>";
}
} catch (\PDOException $e) {
// Menangkap dan menampilkan error koneksi/query
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// Koneksi PDO biasanya akan otomatis tertutup di akhir script, tidak perlu close() secara eksplisit
// $pdo = null; // Bisa set null jika ingin menutup manual
?>
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
Penempatan Kode: Simpan salah satu kode contoh di atas sebagai file .php
(misal pg_test_native.php
atau pg_test_pdo.php
) dan letakkan di root folder website Anda di ServBay (misal /Applications/ServBay/www/myproject/
). Kemudian akses file tersebut melalui browser via URL misalnya http://myproject.servbay.demo/pg_test_native.php
. Pastikan website dan layanan PostgreSQL Anda telah dikonfigurasi serta berjalan dengan baik di ServBay.
Tanya Jawab (FAQ)
Q: Apakah saya perlu memasang ekstensi PostgreSQL untuk PHP (pgsql
atau PDO_PGSQL
) secara manual di ServBay?
A: Tidak perlu. ServBay sudah memasang dan mengaktifkan ekstensi pgsql
dan driver PDO_PGSQL
untuk semua versi PHP yang dikelolanya. Anda cukup menggunakannya di kode Anda tanpa perlu instalasi atau konfigurasi tambahan.
Q: Apa perbedaan antara ekstensi pgsql
dan driver PDO_PGSQL
? Mana yang sebaiknya saya gunakan?
A:
- Ekstensi
pgsql
menyediakan himpunan fungsi khusus untuk PostgreSQL (sepertipg_connect
,pg_query_params
). Jika Anda ingin memanfaatkan fitur PostgreSQL secara spesifik dan mendalam, ini bisa menjadi pilihan yang lebih langsung. PDO_PGSQL
adalah bagian dari lapisan abstraksi PDO. Menggunakan PDO membuat kode database Anda lebih portabel. Jika Anda di masa depan ingin pindah ke database lain (misalnya MySQL), perubahan kode akan lebih minimal. PDO juga mengharuskan penggunaan prepared statement, praktik yang sangat disarankan demi keamanan aplikasi modern PHP.- Rekomendasi: Untuk proyek baru atau proyek yang mengutamakan portabilitas dan keamanan, disarankan menggunakan
PDO_PGSQL
. Jika Anda memelihara proyek lama atau memang membutuhkan fungsipgsql
tertentu, gunakanlah ekstensipgsql
.
Q: Bagaimana mendapatkan info koneksi (host, port, username, password, nama database) untuk layanan PostgreSQL di ServBay?
A:
- Host: Biasanya
127.0.0.1
ataulocalhost
. - Port: Standar PostgreSQL adalah
5432
. Anda dapat memeriksa port yang digunakan melalui panel manajemen paket PostgreSQL di ServBay. - Username / Password / Database Name: Ini adalah user database yang Anda buat sendiri di PostgreSQL. Anda bisa membuat database/user dan pengaturan hak akses menggunakan adminer ServBay atau klien PostgreSQL lain seperti pgAdmin atau DBeaver.
Q: Bagaimana cara mencegah SQL Injection saat memakai ekstensi pgsql
?
A: Hindari memasukkan input user secara langsung ke string query SQL. Gunakan fungsi pg_query_params()
yang memisahkan query dan parameter, sehingga driver akan menangani parameter dengan aman. Alternatif lainnya, pada penggunaan pg_query()
, selalu lakukan escape dengan pg_escape_string()
atau pg_escape_literal()
pada semua input — namun secara umum, pg_query_params
adalah pilihan yang lebih baik.
Kesimpulan
ServBay menyederhanakan proses penggunaan ekstensi PHP pgsql
dan PDO_PGSQL
untuk menghubungkan aplikasi PHP ke database PostgreSQL pada lingkungan macOS lokal Anda, karena seluruhnya sudah terpasang dan diaktifkan secara default. Developer tidak perlu repot memasang atau mengkonfigurasi ekstensi, cukup gunakan yang paling sesuai untuk kebutuhan project (PDO paling direkomendasikan karena kompatibilitas dan keamanannya). Dengan demikian, Anda bisa lebih fokus pada logika aplikasi dan memaksimalkan kekuatan PostgreSQL untuk membangun web app yang tangguh dan handal.