CRUD PHP MySQL Menggunakan MySQLi Object Oriented (OOP)

By | 12 October 2025

CRUD (Create, Read, Update, Delete) adalah konsep dasar dalam pengelolaan data pada aplikasi web. Di tutorial sebelumnya, kita sudah menggunakan MySQLi procedural. Kini saatnya kita naik level dengan belajar CRUD PHP MySQL Menggunakan MySQLi Object-Oriented (OOP), pendekatan yang lebih modern, rapi, dan fleksibel.

Dengan MySQLi OOP, setiap koneksi dan query dikelola sebagai objek, sehingga kode menjadi lebih terstruktur dan mudah dikembangkan.

MySQLi (MySQL Improved) adalah ekstensi PHP untuk berinteraksi dengan database MySQL. Mode Object-Oriented (OOP) memungkinkan kamu menulis kode seperti ini:

$conn = new mysqli("localhost", "root", "", "belajarphp");

Objek $conn kemudian bisa digunakan untuk berbagai operasi seperti query, fetch, dan error handling.

Struktur Folder CRUD

crud_oop/
├── config.php
├── index.php
├── tambah.php
├── edit.php
├── hapus.php

Langkah 1: Membuat Koneksi Database (config.php)

<?php
$servername = "localhost";
$username   = "root";
$password   = "";
$database   = "belajarphp";

$conn = new mysqli($servername, $username, $password, $database);

// Cek koneksi
if ($conn->connect_error) {
    die("Koneksi gagal: " . $conn->connect_error);
}
?>

Penjelasan:

  • new mysqli() membuat koneksi baru ke database.

  • Jika koneksi gagal, connect_error akan berisi pesan error.

Langkah 2: Menampilkan Data (Read) (index.php)

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

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Daftar User (MySQLi OOP)</title>
</head>
<body>
  <h2>Daftar User</h2>
  <a href="tambah.php">+ Tambah Data</a><br><br>

  <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 = $result->fetch_assoc()) : ?>
    <tr>
      <td><?= $row['id']; ?></td>
      <td><?= $row['nama']; ?></td>
      <td><?= $row['email']; ?></td>
      <td><?= $row['alamat']; ?></td>
      <td>
        <a href="edit.php?id=<?= $row['id']; ?>">Edit</a> |
        <a href="hapus.php?id=<?= $row['id']; ?>" onclick="return confirm('Yakin ingin menghapus data ini?')">Hapus</a>
      </td>
    </tr>
    <?php endwhile; ?>
  </table>
</body>
</html>

Penjelasan:

  • $conn->query() menjalankan perintah SQL.

  • $result->fetch_assoc() mengambil hasil query dalam bentuk array asosiatif.

Langkah 3: Menambah Data (Create) (tambah.php)

<?php
include 'config.php';

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

  $sql = "INSERT INTO users (nama, email, alamat) VALUES ('$nama', '$email', '$alamat')";
  if ($conn->query($sql)) {
      echo "Data berhasil disimpan! <a href='index.php'>Kembali</a>";
  } else {
      echo "Error: " . $conn->error;
  }
}
?>

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Tambah Data User</title>
</head>
<body>
  <h2>Tambah Data User</h2>
  <form method="POST">
    <label>Nama:</label><br>
    <input type="text" name="nama" required><br><br>

    <label>Email:</label><br>
    <input type="email" name="email" required><br><br>

    <label>Alamat:</label><br>
    <textarea name="alamat" required></textarea><br><br>

    <button type="submit" name="simpan">Simpan</button>
  </form>
</body>
</html>

Penjelasan:

  • INSERT INTO digunakan untuk menambahkan data baru.

  • $conn->query($sql) menjalankan query insert.

Langkah 4: Mengedit Data (Update) (edit.php)

<?php
include 'config.php';
$id = $_GET['id'];

$result = $conn->query("SELECT * FROM users WHERE id=$id");
$data = $result->fetch_assoc();

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

  $sql = "UPDATE users SET nama='$nama', email='$email', alamat='$alamat' WHERE id=$id";

  if ($conn->query($sql)) {
      echo "Data berhasil diperbarui! <a href='index.php'>Kembali</a>";
  } else {
      echo "Error: " . $conn->error;
  }
}
?>

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Edit Data User</title>
</head>
<body>
  <h2>Edit Data User</h2>
  <form method="POST">
    <label>Nama:</label><br>
    <input type="text" name="nama" value="<?= $data['nama']; ?>" required><br><br>

    <label>Email:</label><br>
    <input type="email" name="email" value="<?= $data['email']; ?>" required><br><br>

    <label>Alamat:</label><br>
    <textarea name="alamat" required><?= $data['alamat']; ?></textarea><br><br>

    <button type="submit" name="update">Update</button>
  </form>
</body>
</html>

Penjelasan:

  • Data diambil dengan query SELECT.

  • Setelah form disubmit, query UPDATE dijalankan untuk menyimpan perubahan.

Langkah 5: Menghapus Data (Delete) (hapus.php)

<?php
include 'config.php';

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

  $sql = "DELETE FROM users WHERE id=$id";
  if ($conn->query($sql)) {
      echo "Data berhasil dihapus! <a href='index.php'>Kembali</a>";
  } else {
      echo "Error: " . $conn->error;
  }
}
?>

Penjelasan:

  • Query DELETE FROM digunakan untuk menghapus data berdasarkan id.

  • Sebelum menghapus, pastikan ID valid agar tidak terjadi kesalahan.

Tips Tambahan Keamanan

  1. Gunakan prepared statements untuk mencegah SQL Injection.

  2. Validasi setiap input dengan filter_var() atau fungsi serupa.

  3. Pastikan ada konfirmasi sebelum menghapus data.

  4. Tambahkan sistem login jika CRUD digunakan di halaman admin.

Kesimpulan

Dalam artikel ini kamu telah belajar membuat CRUD (Create, Read, Update, Delete) menggunakan MySQLi Object-Oriented, meliputi:

  • Membuat koneksi database dengan $conn = new mysqli()

  • Menampilkan data dengan $conn->query()

  • Menambah data dengan INSERT

  • Mengedit data dengan UPDATE

  • Menghapus data dengan DELETE

Pendekatan OOP MySQLi ini lebih modern, mudah dibaca, dan cocok digunakan untuk proyek skala kecil hingga menengah.