Sebelumnya kita telah menggunakan MySQLi untuk membuat koneksi antara PHP dan database MySQL. Kali ini, kita akan belajar cara yang lebih fleksibel dan modern, yaitu koneksi PHP ke MySQL dengan PDO (PHP Data Objects).
PDO bukan hanya bisa digunakan untuk MySQL, tapi juga untuk database lain seperti:
-
PostgreSQL
-
SQLite
-
Oracle
-
dan lainnya.
Artinya, kalau nanti kamu ingin memindahkan aplikasi ke database lain, kamu tidak perlu menulis ulang semua query — cukup ubah konfigurasi koneksinya saja.
1. Menyiapkan Database
Kita masih akan menggunakan database yang sama seperti sebelumnya, yaitu:
Nama database: toko_online
Tabel: produk
Kolom | Tipe Data | Keterangan |
---|---|---|
id | INT(11) | PRIMARY KEY, AUTO_INCREMENT |
nama_produk | VARCHAR(100) | Nama produk |
harga | INT(11) | Harga produk |
stok | INT(11) | Jumlah stok |
2. Struktur File Project
Buat folder di htdocs
seperti berikut:
C:\xampp\htdocs\belajarphp\
Buat file baru bernama:
koneksi_pdo.php
3. Membuat Koneksi Menggunakan PDO
Isi file koneksi_pdo.php seperti berikut:
<?php $host = 'localhost'; $db = 'toko_online'; $user = 'root'; $pass = ''; try { // Membuat koneksi ke database menggunakan PDO $conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass); // Mengatur mode error agar menampilkan exception jika terjadi kesalahan $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Koneksi berhasil ke database '$db'"; } catch (PDOException $e) { // Menangkap error jika koneksi gagal echo "Koneksi gagal: " . $e->getMessage(); } ?>
Buka di browser:
http://localhost/belajarphp/koneksi_pdo.php
Jika berhasil:
Koneksi berhasil ke database 'toko_online'
4. Penjelasan Kode
Baris | Penjelasan |
---|---|
new PDO(...) |
Membuat koneksi ke database. |
mysql:host=$host;dbname=$db;charset=utf8 |
Format DSN (Data Source Name) untuk MySQL. |
$conn->setAttribute() |
Mengatur perilaku koneksi (misalnya mode error). |
PDO::ERRMODE_EXCEPTION |
Menampilkan error dalam bentuk exception agar mudah ditangani. |
catch (PDOException $e) |
Menangkap kesalahan yang terjadi saat koneksi. |
5. Menguji Koneksi Gagal
Coba ubah nama database jadi salah:
$db = 'db_salah';
Buka ulang file-nya, hasil:
Koneksi gagal: SQLSTATE[HY000] [1049] Unknown database 'db_salah'
Artinya PDO berhasil menampilkan pesan error yang informatif.
6. Menjalankan Query Menggunakan PDO
Koneksi PDO tidak hanya untuk membuat koneksi, tapi juga bisa menjalankan perintah SQL.
Contoh: Menampilkan data dari tabel produk
<?php include 'koneksi_pdo.php'; try { $stmt = $conn->query("SELECT * FROM produk"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row['nama_produk'] . " - Rp" . number_format($row['harga']) . "<br>"; } } catch (PDOException $e) { echo "Terjadi kesalahan: " . $e->getMessage(); } ?>
Penjelasan:
-
$conn->query()
→ Menjalankan perintah SQL. -
$stmt->fetch(PDO::FETCH_ASSOC)
→ Mengambil hasil query sebagai array asosiatif. -
try...catch
→ Menangani kesalahan dengan aman tanpa menampilkan error mentah ke pengguna.
7. Contoh Koneksi Aman dengan Prepared Statement
Salah satu keunggulan PDO adalah dukungan Prepared Statement, yaitu fitur untuk mencegah SQL Injection.
Contoh:
<?php include 'koneksi_pdo.php'; try { $stmt = $conn->prepare("SELECT * FROM produk WHERE harga > :harga_min"); $stmt->bindParam(':harga_min', $harga_min); $harga_min = 100000; $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row['nama_produk'] . " - Rp" . number_format($row['harga']) . "<br>"; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
Penjelasan:
-
prepare()
→ Menyiapkan query sebelum dijalankan. -
bindParam()
→ Mengikat variabel PHP ke parameter SQL. -
execute()
→ Menjalankan query dengan nilai parameter yang sudah aman.
Keuntungan:
✅ Aman dari SQL Injection
✅ Lebih cepat untuk query berulang
8. Menutup Koneksi PDO
Berbeda dengan MySQLi yang punya fungsi mysqli_close()
,
PDO menutup koneksi secara otomatis saat objek koneksi dihapus.
Jika ingin menutup manual:
$conn = null;
9. Keunggulan PDO Dibanding MySQLi
Fitur | MySQLi | PDO |
---|---|---|
Dukungan banyak database | ❌ Hanya MySQL | ✅ Banyak (MySQL, PostgreSQL, SQLite, dll) |
Prepared Statement | ✅ | ✅ |
Error Handling | Terbatas | Exception (lebih rapi) |
Orientasi Objek | ✅ | ✅ |
Fleksibilitas | Sedang | Tinggi |
Kesimpulan
Dalam artikel ini kamu telah belajar:
-
Cara membuat koneksi PHP ke MySQL menggunakan PDO.
-
Cara menangani error dengan
try...catch
. -
Cara menjalankan query biasa dan menggunakan prepared statement.
-
Kelebihan PDO dibanding MySQLi.
Dengan PDO, kode PHP kamu akan lebih aman, fleksibel, dan mudah dikembangkan di masa depan.