CRUD PHP MySQLi OOP Prepared Statement

By | 12 October 2025

Pada artikel sebelumnya kita telah belajar membuat CRUD PHP MySQL dengan MySQLi Object Oriented menggunakan query biasa. Namun, ada satu hal penting dalam pengembangan aplikasi database modern — yaitu keamanan dari SQL Injection.

Di sinilah Prepared Statement berperan penting dalam proses CRUD PHP MySQLi OOP Prepared Statement.

Dalam artikel ini, kita akan mempelajari cara:

  • Membuat koneksi MySQLi OOP

  • Menggunakan Prepared Statement untuk Insert, Read, Update, dan Delete

  • Menjaga keamanan dan performa query database

1. Membuat Koneksi Database (MySQLi OOP)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "belajar_php";

// Membuat koneksi
$conn = new mysqli($servername, $username, $password, $dbname);

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

2. CREATE – Menambahkan Data Menggunakan Prepared Statement

<?php
// Include koneksi
include 'koneksi.php';

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

    $stmt = $conn->prepare("INSERT INTO users (nama, email) VALUES (?, ?)");
    $stmt->bind_param("ss", $nama, $email);

    if ($stmt->execute()) {
        echo "Data berhasil disimpan!";
    } else {
        echo "Gagal menyimpan data: " . $stmt->error;
    }

    $stmt->close();
}
?>
<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() digunakan untuk membuat query template.

  • bind_param("ss", $nama, $email) mengikat variabel dengan tipe data string (s).

  • SQL Injection dicegah karena input tidak langsung masuk ke query.

3. READ – Menampilkan Data dari Database

<?php
include 'koneksi.php';

$sql = "SELECT * FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " | Nama: " . $row["nama"] . " | Email: " . $row["email"] . "<br>";
    }
} else {
    echo "Tidak ada data.";
}
?>

4. UPDATE – Mengedit Data Menggunakan Prepared Statement

<?php
include 'koneksi.php';

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

    $stmt = $conn->prepare("UPDATE users SET nama=?, email=? WHERE id=?");
    $stmt->bind_param("ssi", $nama, $email, $id);

    if ($stmt->execute()) {
        echo "Data berhasil diupdate!";
    } else {
        echo "Gagal update data: " . $stmt->error;
    }

    $stmt->close();
}
?>
<form method="post">
    ID: <input type="text" name="id"><br>
    Nama: <input type="text" name="nama"><br>
    Email: <input type="text" name="email"><br>
    <input type="submit" name="update" value="Update">
</form>

5. DELETE – Menghapus Data Menggunakan Prepared Statement

<?php
include 'koneksi.php';

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

    $stmt = $conn->prepare("DELETE FROM users WHERE id=?");
    $stmt->bind_param("i", $id);

    if ($stmt->execute()) {
        echo "Data berhasil dihapus!";
    } else {
        echo "Gagal menghapus data: " . $stmt->error;
    }

    $stmt->close();
}
?>
<form method="post">
    ID yang ingin dihapus: <input type="text" name="id"><br>
    <input type="submit" name="hapus" value="Hapus">
</form>

6. Keunggulan Prepared Statement

  1. Lebih Aman — input tidak bisa menyisipkan kode SQL berbahaya.

  2. Lebih Cepat — query di-parse sekali, dapat digunakan berkali-kali.

  3. Lebih Rapi — mudah dipelihara dan dikembangkan.

Kesimpulan

Dengan menggunakan Prepared Statement pada MySQLi OOP, kita dapat membuat sistem CRUD yang:

  • Lebih aman dari SQL Injection

  • Lebih cepat untuk query berulang

  • Lebih profesional dan terstruktur

Di artikel berikutnya, kita akan belajar CRUD menggunakan PDO (PHP Data Objects) — versi yang lebih fleksibel dan mendukung banyak database.