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()
danbindParam()
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.