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.
Pingback: CRUD PHP MySQL Lengkap dengan Upload Gambar - Tutorial