CRUD adalah singkatan dari Create, Read, Update, Delete โ empat operasi dasar yang hampir selalu ada di setiap aplikasi web yang menggunakan database. Memahami CRUD dengan PHP native adalah fondasi yang wajib dikuasai sebelum berpindah ke framework. Pada tutorial ini, kita akan membangun aplikasi CRUD sederhana untuk mengelola data buku menggunakan PHP dan MySQL dengan PDO.
Persiapan Database
Pertama, buat database dan tabel di MySQL. Jalankan SQL berikut di phpMyAdmin atau MySQL CLI:
CREATE DATABASE perpustakaan;
USE perpustakaan;
CREATE TABLE buku (
id INT AUTO_INCREMENT PRIMARY KEY,
judul VARCHAR(200) NOT NULL,
pengarang VARCHAR(100) NOT NULL,
tahun INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
File Koneksi Database
Buat file koneksi.php yang akan kita gunakan di semua halaman:
<?php
// koneksi.php
$dsn = "mysql:host=localhost;dbname=perpustakaan;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, 'root', '', $options);
} catch (PDOException $e) {
die("Koneksi gagal: " . $e->getMessage());
}
Read โ Menampilkan Data
Buat file index.php untuk menampilkan semua data buku sekaligus link ke halaman tambah, edit, dan hapus:
<?php
require 'koneksi.php';
$stmt = $pdo->query("SELECT * FROM buku ORDER BY id DESC");
$daftar_buku = $stmt->fetchAll();
?>
<!-- HTML tabel daftar buku -->
<a href="tambah.php">Tambah Buku</a>
<table border="1">
<tr>
<th>Judul</th><th>Pengarang</th><th>Tahun</th><th>Aksi</th>
</tr>
<?php foreach ($daftar_buku as $buku): ?>
<tr>
<td><?= htmlspecialchars($buku['judul']) ?></td>
<td><?= htmlspecialchars($buku['pengarang']) ?></td>
<td><?= $buku['tahun'] ?></td>
<td>
<a href="edit.php?id=<?= $buku['id'] ?>">Edit</a> |
<a href="hapus.php?id=<?= $buku['id'] ?>" onclick="return confirm('Yakin hapus?')">Hapus</a>
</td>
</tr>
<?php endforeach; ?>
</table>
Perhatikan penggunaan htmlspecialchars() saat menampilkan data ke HTML โ ini mencegah serangan XSS.
Create โ Menambah Data
Buat file tambah.php dengan form input dan logika penyimpanan:
<?php
require 'koneksi.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$judul = trim($_POST['judul']);
$pengarang = trim($_POST['pengarang']);
$tahun = (int) $_POST['tahun'];
if ($judul && $pengarang && $tahun) {
$stmt = $pdo->prepare(
"INSERT INTO buku (judul, pengarang, tahun) VALUES (:judul, :pengarang, :tahun)"
);
$stmt->execute([
':judul' => $judul,
':pengarang' => $pengarang,
':tahun' => $tahun,
]);
header('Location: index.php');
exit;
}
}
?>
<form method="POST">
<input type="text" name="judul" placeholder="Judul Buku" required>
<input type="text" name="pengarang" placeholder="Pengarang" required>
<input type="number" name="tahun" placeholder="Tahun Terbit" required>
<button type="submit">Simpan</button>
</form>
Kita menggunakan prepared statements dengan prepare() dan execute() โ cara aman memasukkan data ke database karena input pengguna tidak pernah langsung digabung ke query SQL.
Update โ Mengubah Data
Buat file edit.php untuk mengambil data lama dan memperbaruinya:
<?php
require 'koneksi.php';
$id = (int) ($_GET['id'] ?? 0);
// Ambil data lama
$stmt = $pdo->prepare("SELECT * FROM buku WHERE id = :id");
$stmt->execute([':id' => $id]);
$buku = $stmt->fetch();
if (!$buku) {
die("Buku tidak ditemukan.");
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$judul = trim($_POST['judul']);
$pengarang = trim($_POST['pengarang']);
$tahun = (int) $_POST['tahun'];
$stmt = $pdo->prepare(
"UPDATE buku SET judul = :judul, pengarang = :pengarang, tahun = :tahun WHERE id = :id"
);
$stmt->execute([
':judul' => $judul,
':pengarang' => $pengarang,
':tahun' => $tahun,
':id' => $id,
]);
header('Location: index.php');
exit;
}
?>
<form method="POST">
<input type="text" name="judul" value="<?= htmlspecialchars($buku['judul']) ?>" required>
<input type="text" name="pengarang" value="<?= htmlspecialchars($buku['pengarang']) ?>" required>
<input type="number" name="tahun" value="<?= $buku['tahun'] ?>" required>
<button type="submit">Update</button>
</form>
Delete โ Menghapus Data
Buat file hapus.php yang sederhana namun aman:
<?php
require 'koneksi.php';
$id = (int) ($_GET['id'] ?? 0);
if ($id > 0) {
$stmt = $pdo->prepare("DELETE FROM buku WHERE id = :id");
$stmt->execute([':id' => $id]);
}
header('Location: index.php');
exit;
ID selalu di-cast ke integer ((int)) sebelum digunakan โ ini cara cepat mencegah manipulasi parameter yang berbahaya.
Kesimpulan
Dengan PHP native dan PDO, kamu sudah bisa membangun aplikasi CRUD yang fungsional dan aman. Kunci utamanya adalah selalu gunakan prepared statements untuk operasi INSERT, UPDATE, dan DELETE, serta htmlspecialchars() saat menampilkan data ke HTML. Dari fondasi ini, kamu bisa mengembangkan aplikasi lebih lanjut dengan menambahkan validasi, autentikasi, hingga antarmuka yang lebih baik.