CRUD PHP MySQL dengan PDO (PHP Data Objects)

By | 12 October 2025

Setelah sebelumnya kita mempelajari CRUD PHP MySQL menggunakan MySQLi Object Oriented dan Prepared Statement, kini saatnya beralih ke metode yang lebih fleksibel dan powerfull, yaitu CRUD PHP MySQL dengan PDO (PHP Data Objects).

PDO merupakan interface universal untuk koneksi database di PHP yang mendukung banyak jenis database, seperti MySQL, PostgreSQL, SQLite, dan lainnya.

Dengan PDO, kode kamu bisa lebih aman, rapi, dan mudah di-maintain.

1. Membuat Koneksi Database dengan PDO

Buat file koneksi.php:

<?php
$host = "localhost";
$dbname = "belajar_php";
$username = "root";
$password = "";

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    // Atur mode error agar tampil sebagai exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // echo "Koneksi berhasil";
} catch (PDOException $e) {
    echo "Koneksi gagal: " . $e->getMessage();
}
?>

Penjelasan:

  • new PDO() digunakan untuk membuat koneksi ke database.

  • ATTR_ERRMODE membuat kesalahan query mudah dilacak dengan exception.

  • PDO mendukung binding parameter otomatis untuk keamanan.

2. CREATE – Menambahkan Data ke Database

Buat file tambah.php:

<?php
include 'koneksi.php';

if (isset($_POST['submit'])) {
    $nama = $_POST['nama'];
    $email = $_POST['email'];

    $sql = "INSERT INTO users (nama, email) VALUES (:nama, :email)";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':nama', $nama);
    $stmt->bindParam(':email', $email);

    if ($stmt->execute()) {
        echo "Data berhasil disimpan!";
    } else {
        echo "Gagal menyimpan data.";
    }
}
?>

<form method="post">
    Nama: <input type="text" name="nama"><br>
    Email: <input type="text" name="email"><br>
    <input type="submit" name="submit" value="Simpan">
</form>

Penjelasan:

  • prepare() dan bindParam() melindungi dari SQL Injection.

  • :nama dan :email adalah named parameter yang mudah dibaca.

3. READ – Menampilkan Data dari Database

Buat file index.php:

<?php
include 'koneksi.php';

$sql = "SELECT * FROM users";
$stmt = $conn->prepare($sql);
$stmt->execute();

$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h2>Daftar Pengguna</h2>
<table border="1" cellpadding="5">
<tr>
    <th>ID</th>
    <th>Nama</th>
    <th>Email</th>
    <th>Aksi</th>
</tr>
<?php foreach ($users as $user): ?>
<tr>
    <td><?= $user['id'] ?></td>
    <td><?= $user['nama'] ?></td>
    <td><?= $user['email'] ?></td>
    <td>
        <a href="edit.php?id=<?= $user['id'] ?>">Edit</a> |
        <a href="hapus.php?id=<?= $user['id'] ?>" onclick="return confirm('Yakin hapus?')">Hapus</a>
    </td>
</tr>
<?php endforeach; ?>
</table>

Penjelasan:

  • fetchAll(PDO::FETCH_ASSOC) mengembalikan array asosiatif.

  • Data dapat langsung ditampilkan dengan foreach.

4. UPDATE – Mengedit Data dengan PDO

Buat file edit.php:

<?php
include 'koneksi.php';

// Ambil data berdasarkan ID
$id = $_GET['id'];
$stmt = $conn->prepare("SELECT * FROM users WHERE id=:id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (isset($_POST['update'])) {
    $nama = $_POST['nama'];
    $email = $_POST['email'];

    $sql = "UPDATE users SET nama=:nama, email=:email WHERE id=:id";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':nama', $nama);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':id', $id);

    if ($stmt->execute()) {
        echo "Data berhasil diupdate!";
    } else {
        echo "Gagal update data.";
    }
}
?>

<form method="post">
    Nama: <input type="text" name="nama" value="<?= $user['nama'] ?>"><br>
    Email: <input type="text" name="email" value="<?= $user['email'] ?>"><br>
    <input type="submit" name="update" value="Update">
</form>

Penjelasan:

  • Menggunakan bindParam() untuk setiap parameter agar aman.

  • Nilai input diambil dari database terlebih dahulu.

5. DELETE – Menghapus Data dari Database

Buat file hapus.php:

<?php
include 'koneksi.php';

$id = $_GET['id'];

$sql = "DELETE FROM users WHERE id=:id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);

if ($stmt->execute()) {
    echo "Data berhasil dihapus!";
} else {
    echo "Gagal menghapus data.";
}
?>

6. Keunggulan PDO Dibandingkan MySQLi

Fitur PDO MySQLi
Dukungan banyak database ✅ Ya ❌ Hanya MySQL
Prepared Statement ✅ Ya ✅ Ya
Named Parameter ✅ Ya ❌ Tidak
Error Handling Exception ✅ Ya ⚠️ Terbatas
Portabilitas ✅ Sangat tinggi ❌ Rendah

Kesimpulan

Dengan menggunakan PDO, kita mendapatkan:

  • Keamanan lebih baik berkat prepared statement

  • Kode lebih fleksibel dan bersih

  • Kemudahan migrasi ke database lain

Jika kamu ingin membangun aplikasi berskala besar, PDO adalah pilihan ideal karena mudah di-maintain dan powerful.