Insert Data ke Database MySql dengan PHP (Versi MySqli dan PDO)

By | 12 October 2025

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:

  1. Menggunakan MySQLi

  2. 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.