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_ERRMODEmembuat 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. -
:namadan:emailadalah 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.