Koneksi PHP ke MySQL dengan PDO (PHP Data Objects)

By | 12 October 2025

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.