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
-
✅ Lebih Aman — input tidak bisa menyisipkan kode SQL berbahaya.
-
⚡ Lebih Cepat — query di-parse sekali, dapat digunakan berkali-kali.
-
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.