Setelah kamu bisa menampilkan data dari database, langkah selanjutnya dalam CRUD adalah menambahkan data baru (Create atau Insert). Fitur ini sangat penting untuk aplikasi seperti toko online, sistem manajemen data, atau blog.
Dalam artikel ini, kamu akan belajar dua cara:
-
Menggunakan MySQLi
-
Menggunakan PDO
Keduanya akan dikemas dalam contoh yang mudah dipahami untuk pemula.
Struktur Database
Kita tetap menggunakan database toko_online
dengan tabel produk
seperti berikut:
Kolom | Tipe Data | Keterangan |
---|---|---|
id | INT(11) | PRIMARY KEY, AUTO_INCREMENT |
nama_produk | VARCHAR(100) | Nama produk |
harga | INT(11) | Harga produk |
stok | INT(11) | Jumlah stok |
1. Menyimpan Data Menggunakan MySQLi
a. File Koneksi
Buat file koneksi.php
(kalau belum ada):
<?php $host = "localhost"; $user = "root"; $pass = ""; $db = "toko_online"; $conn = mysqli_connect($host, $user, $pass, $db); if (!$conn) { die("Koneksi gagal: " . mysqli_connect_error()); } ?>
b. Form Input Data
Buat file insert_mysqli.php
:
<?php include "koneksi.php"; ?> <!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tambah Data Produk (MySQLi)</title> <style> body { font-family: Arial; margin: 40px; } form { max-width: 400px; margin: auto; } input { width: 100%; padding: 8px; margin: 8px 0; } button { padding: 10px 15px; background: green; color: white; border: none; cursor: pointer; } .msg { text-align: center; margin-bottom: 15px; } </style> </head> <body> <h2 style="text-align:center;">Tambah Data Produk (MySQLi)</h2> <?php if (isset($_POST['submit'])) { $nama = mysqli_real_escape_string($conn, $_POST['nama_produk']); $harga = (int) $_POST['harga']; $stok = (int) $_POST['stok']; $query = "INSERT INTO produk (nama_produk, harga, stok) VALUES ('$nama', '$harga', '$stok')"; if (mysqli_query($conn, $query)) { echo "<p class='msg' style='color:green;'>Data berhasil ditambahkan!</p>"; } else { echo "<p class='msg' style='color:red;'>Gagal menambah data: " . mysqli_error($conn) . "</p>"; } } ?> <form method="POST"> <label>Nama Produk:</label> <input type="text" name="nama_produk" required> <label>Harga:</label> <input type="number" name="harga" required> <label>Stok:</label> <input type="number" name="stok" required> <button type="submit" name="submit">Simpan</button> </form> </body> </html>
Penjelasan:
-
mysqli_real_escape_string()
digunakan untuk mencegah input berbahaya. -
Query
INSERT INTO
menambahkan data baru ke tabel. -
Pesan sukses atau gagal tampil di atas form.
2. Menyimpan Data Menggunakan PDO
a. File Koneksi
Buat file koneksi_pdo.php
:
<?php $host = "localhost"; $db = "toko_online"; $user = "root"; $pass = ""; try { $conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("Koneksi gagal: " . $e->getMessage()); } ?>
b. Form Input Data
Buat file insert_pdo.php
:
<?php include "koneksi_pdo.php"; ?> <!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tambah Data Produk (PDO)</title> <style> body { font-family: Arial; margin: 40px; } form { max-width: 400px; margin: auto; } input { width: 100%; padding: 8px; margin: 8px 0; } button { padding: 10px 15px; background: navy; color: white; border: none; cursor: pointer; } .msg { text-align: center; margin-bottom: 15px; } </style> </head> <body> <h2 style="text-align:center;">Tambah Data Produk (PDO)</h2> <?php if (isset($_POST['submit'])) { $nama = $_POST['nama_produk']; $harga = $_POST['harga']; $stok = $_POST['stok']; try { $stmt = $conn->prepare("INSERT INTO produk (nama_produk, harga, stok) VALUES (:nama, :harga, :stok)"); $stmt->bindParam(':nama', $nama); $stmt->bindParam(':harga', $harga); $stmt->bindParam(':stok', $stok); if ($stmt->execute()) { echo "<p class='msg' style='color:green;'>Data berhasil ditambahkan!</p>"; } else { echo "<p class='msg' style='color:red;'>Gagal menambah data!</p>"; } } catch (PDOException $e) { echo "<p class='msg' style='color:red;'>Error: " . $e->getMessage() . "</p>"; } } ?> <form method="POST"> <label>Nama Produk:</label> <input type="text" name="nama_produk" required> <label>Harga:</label> <input type="number" name="harga" required> <label>Stok:</label> <input type="number" name="stok" required> <button type="submit" name="submit">Simpan</button> </form> </body> </html>
Penjelasan:
-
Menggunakan prepared statement agar lebih aman dari SQL Injection.
-
bindParam()
digunakan untuk mengikat nilai ke query. -
Jika berhasil, muncul pesan “Data berhasil ditambahkan!”.
3. Perbandingan MySQLi vs PDO dalam INSERT Data
Aspek | MySQLi | PDO |
---|---|---|
Keamanan | Aman (jika di-escape manual) | Lebih aman (prepared statement) |
Kode | Sedikit lebih sederhana | Lebih fleksibel |
Penanganan Error | Manual | try...catch otomatis |
Skalabilitas | Hanya MySQL | Bisa banyak database |
Tips Tambahan
-
Gunakan validasi input (misalnya
is_numeric()
untuk harga dan stok). -
Simpan koneksi di file terpisah agar mudah digunakan ulang.
-
Tampilkan pesan sukses/gagal secara elegan agar UX lebih baik.
-
Gunakan prepared statement di semua query agar aman.
Kesimpulan
Di artikel ini kamu telah belajar dua cara menambahkan data ke database:
✅ MySQLi → Cocok untuk proyek sederhana.
✅ PDO → Aman, fleksibel, dan cocok untuk proyek besar.
Keduanya bisa digunakan tergantung kebutuhanmu.
Langkah berikutnya setelah Insert adalah Update (Edit Data) dan Delete (Hapus Data) untuk melengkapi sistem CRUD kamu.