Hapus Data di PHP dan MySQL menggunakan MySQLi & PDO

By | 12 October 2025

Sebelumnya kita sudah belajar cara menampilkan data, menambah data, mengubah data dan sekarang hapus data di PHP dan MySQL. Dalam aplikasi web, fitur hapus data sangat penting untuk mengelola informasi dengan baik. Contohnya:

  • Menghapus data pengguna yang sudah tidak aktif

  • Menghapus produk dari toko online

  • Menghapus artikel dari sistem manajemen konten

Namun, fitur ini juga harus dibuat hati-hati agar tidak menghapus data yang salah atau membuka celah keamanan. Di artikel ini, kamu akan belajar dua versi implementasi:

  1. MySQLi (prosedural)

  2. PDO (PHP Data Objects)

Persiapan Database

Pastikan kamu sudah memiliki tabel users seperti pada seri sebelumnya:

CREATE TABLE users (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(100),
  email VARCHAR(100),
  alamat TEXT
);

Struktur Folder

delete_data/
├── config.php
├── index.php
├── delete.php

Penjelasan:

  • config.php → koneksi ke database

  • index.php → menampilkan daftar data

  • delete.php → proses penghapusan data

Versi 1: Menghapus Data Menggunakan MySQLi

File: config.php

<?php
$koneksi = mysqli_connect("localhost", "root", "", "belajarphp");

if (!$koneksi) {
    die("Koneksi gagal: " . mysqli_connect_error());
}
?>

File: index.php

Menampilkan daftar data dari tabel users dengan tombol “Hapus”.

<?php
include 'config.php';
$result = mysqli_query($koneksi, "SELECT * FROM users");
?>

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Daftar User</title>
</head>
<body>
  <h2>Daftar User</h2>
  <table border="1" cellpadding="10">
    <tr>
      <th>ID</th>
      <th>Nama</th>
      <th>Email</th>
      <th>Alamat</th>
      <th>Aksi</th>
    </tr>
    <?php while ($row = mysqli_fetch_assoc($result)) : ?>
    <tr>
      <td><?= $row['id']; ?></td>
      <td><?= $row['nama']; ?></td>
      <td><?= $row['email']; ?></td>
      <td><?= $row['alamat']; ?></td>
      <td>
        <a href="delete.php?id=<?= $row['id']; ?>" onclick="return confirm('Yakin ingin menghapus data ini?')">Hapus</a>
      </td>
    </tr>
    <?php endwhile; ?>
  </table>
</body>
</html>

File: delete.php

<?php
include 'config.php';

if (isset($_GET['id'])) {
    $id = $_GET['id'];

    $query = mysqli_query($koneksi, "DELETE FROM users WHERE id='$id'");

    if ($query) {
        echo "Data berhasil dihapus! <a href='index.php'>Kembali</a>";
    } else {
        echo "Gagal menghapus data: " . mysqli_error($koneksi);
    }
}
?>

Versi 2: Menghapus Data Menggunakan PDO

File: config.php

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=belajarphp", "root", "");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Koneksi gagal: " . $e->getMessage());
}
?>

File: index.php

<?php
include 'config.php';
$stmt = $pdo->query("SELECT * FROM users");
?>

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Daftar User (PDO)</title>
</head>
<body>
  <h2>Daftar User</h2>
  <table border="1" cellpadding="10">
    <tr>
      <th>ID</th>
      <th>Nama</th>
      <th>Email</th>
      <th>Alamat</th>
      <th>Aksi</th>
    </tr>
    <?php while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) : ?>
    <tr>
      <td><?= $row['id']; ?></td>
      <td><?= $row['nama']; ?></td>
      <td><?= $row['email']; ?></td>
      <td><?= $row['alamat']; ?></td>
      <td>
        <a href="delete.php?id=<?= $row['id']; ?>" onclick="return confirm('Yakin ingin menghapus data ini?')">Hapus</a>
      </td>
    </tr>
    <?php endwhile; ?>
  </table>
</body>
</html>

File: delete.php

<?php
include 'config.php';

if (isset($_GET['id'])) {
    $id = $_GET['id'];

    $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
    $hapus = $stmt->execute([$id]);

    if ($hapus) {
        echo "Data berhasil dihapus! <a href='index.php'>Kembali</a>";
    } else {
        echo "Gagal menghapus data.";
    }
}
?>

Tips Keamanan Penting

  1. Gunakan konfirmasi penghapusan dengan onclick="return confirm(...)" untuk mencegah salah klik.

  2. Selalu gunakan prepared statements (seperti di PDO) agar aman dari SQL Injection.

  3. Jika di aplikasi nyata, sebaiknya gunakan metode POST untuk penghapusan (bukan GET).

  4. Pertimbangkan fitur soft delete (menandai data sebagai terhapus, bukan benar-benar menghapus).

Kesimpulan

Dalam artikel ini kamu telah belajar:

  • Cara menampilkan data dengan tombol hapus.

  • Proses menghapus data menggunakan MySQLi dan PDO.

  • Tips keamanan untuk mencegah penghapusan tidak sengaja atau serangan SQL Injection.

Dengan memahami ini, kamu sudah melengkapi fitur CRUD (Create, Read, Update, Delete) — fondasi utama dalam pengembangan aplikasi berbasis PHP dan MySQL.