Koneksi Data

πŸ“… Rabu, 01 April 2026 ⏱ 1 menit baca
<?php
// Koneksi ke database
$host = "mysql"; // kalau docker: ganti jadi "mysql"
$user = "root";
$pass = "root";
$db   = "ibnu";

try {
    // Buat koneksi PDO
    $conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
    
    // Set error mode
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Query ambil data
    $stmt = $conn->query("SELECT * FROM siswa");

} catch (PDOException $e) {
    die("Koneksi gagal: " . $e->getMessage());
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Data Siswa</title>
    <style>
        table {
            border-collapse: collapse;
            width: 70%;
            margin: 20px auto;
        }
        th, td {
            border: 1px solid #333;
            padding: 10px;
            text-align: center;
        }
        th {
            background-color: #4CAF50;
            color: white;
        }
    </style>
</head>
<body>

<h2 style="text-align:center;">Data Siswa</h2>

<table>
    <tr>
        <th>No</th>
        <th>Nama</th>
        <th>Alamat</th>
        <th>Tanggal Lahir</th>
    </tr>

    <?php
    $no = 1;

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr>";
        echo "<td>".$no++."</td>";
        echo "<td>".$row['nama']."</td>";
        echo "<td>".$row['alamat']."</td>";
        echo "<td>".$row['tgl_lahir']."</td>";
        echo "</tr>";
    }

    if ($no == 1) {
        echo "<tr><td colspan='4'>Data tidak ada</td></tr>";
    }
    ?>

</table>

</body>
</html>

Berikut penjelasan teori dasar + pembahasan detail dari kode PHP yang kamu buat. Saya jelaskan dari konsep paling dasar sampai alur eksekusi programnya supaya benar-benar paham, bukan sekadar hafal.


πŸ”° 1. Konsep Dasar yang Digunakan

Kode ini sebenarnya menggabungkan beberapa konsep penting:

1. PHP (Server-Side Programming)

  • PHP adalah bahasa yang berjalan di server

  • Digunakan untuk:

    • Koneksi database
    • Mengambil data
    • Menghasilkan HTML secara dinamis

πŸ‘‰ Jadi HTML yang tampil di browser sebenarnya hasil dari PHP.


2. Database MySQL

  • Data disimpan di database ibnu

  • Tabel yang digunakan: siswa

  • Kolom:

    • nama
    • alamat
    • tgl_lahir

3. PDO (PHP Data Objects)

PDO adalah cara modern untuk koneksi database di PHP

πŸ“Œ Keunggulan PDO:

  • Lebih aman (mencegah SQL Injection)
  • Support banyak database (MySQL, PostgreSQL, dll)
  • Object-oriented (rapi & fleksibel)

πŸ”Œ 2. Bagian Koneksi Database

$host = "mysql";
$user = "root";
$pass = "root";
$db   = "ibnu";

Teori:

  • Ini disebut konfigurasi koneksi
  • Digunakan untuk menghubungkan PHP ke DB server

πŸ“Œ Catatan:

  • "mysql" biasanya dipakai di Docker (nama service)
  • Kalau lokal β†’ biasanya "localhost"

Membuat koneksi PDO

$conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);

Teori:

Ini adalah instansiasi object PDO

Format:

PDO("driver:host=HOST;dbname=DB", USER, PASSWORD)

Penjelasan:

  • mysql: β†’ jenis database
  • host β†’ alamat server
  • dbname β†’ nama database
  • charset=utf8 β†’ encoding karakter

πŸ“Œ Kenapa penting?

  • Menghindari masalah encoding (huruf aneh)

Error Handling

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Teori:

Mengatur cara PDO menangani error

Jenis:

  • SILENT β†’ diam (tidak disarankan)
  • WARNING β†’ warning
  • EXCEPTION β†’ error jadi exception βœ… (dipakai)

πŸ“Œ Keuntungan:

  • Bisa ditangkap oleh try-catch
  • Lebih mudah debugging

Try - Catch

try {
   ...
} catch (PDOException $e) {
    die("Koneksi gagal: " . $e->getMessage());
}

Teori:

  • Digunakan untuk menangani error runtime
  • Jika koneksi gagal β†’ masuk ke catch

πŸ“Œ die():

  • Menghentikan program
  • Menampilkan pesan error

πŸ“Š 3. Query Data

$stmt = $conn->query("SELECT * FROM siswa");

Teori:

  • query() digunakan untuk menjalankan SQL langsung
  • Menghasilkan object PDOStatement

πŸ“Œ PDOStatement:

  • Object yang menyimpan hasil query
  • Bisa di-loop / di-fetch

πŸ” 4. Mengambil Data (Fetch)

while ($row = $stmt->fetch(PDO::FETCH_ASSOC))

Teori:

  • fetch() β†’ mengambil 1 baris data
  • Loop while β†’ membaca semua data

Jenis Fetch Mode:

PDO::FETCH_ASSOC

Artinya:

  • Data diambil dalam bentuk array asosiatif

Contoh hasil:

$row = [
  "nama" => "Budi",
  "alamat" => "Bandung",
  "tgl_lahir" => "2005-01-01"
];

🌐 5. HTML + PHP (Dynamic Content)

echo "<td>".$row['nama']."</td>";

Teori:

  • PHP menyisipkan data ke HTML
  • Ini disebut server-side rendering

πŸ“Œ Alur:

  1. PHP ambil data dari DB
  2. PHP generate HTML
  3. Browser menerima HTML jadi

πŸ”’ 6. Penomoran Otomatis

$no = 1;
echo "<td>".$no++."</td>";

Teori:

  • $no++ β†’ increment
  • Digunakan untuk nomor urut tabel

⚠️ 7. Validasi Data Kosong

if ($no == 1) {
    echo "<tr><td colspan='4'>Data tidak ada</td></tr>";
}

Teori:

  • Jika loop tidak jalan β†’ berarti data kosong
  • $no tetap 1 β†’ belum bertambah

πŸ“Œ colspan='4':

  • Menggabungkan 4 kolom jadi 1

🎨 8. CSS Styling

table {
    border-collapse: collapse;
}

Teori:

  • border-collapse β†’ menggabungkan border
  • margin auto β†’ posisi tengah
  • th β†’ header tabel

πŸ”„ 9. Alur Eksekusi Program (WAJIB PAHAM)

Urutan yang terjadi:

  1. Browser request halaman PHP

  2. Server menjalankan PHP

  3. PHP:

    • konek ke database
    • jalankan query
    • ambil data
  4. PHP generate HTML

  5. HTML dikirim ke browser

  6. Browser menampilkan tabel


🧠 10. Konsep Inti yang Dipakai

Ringkasan teori penting:

  • Client vs Server
  • Koneksi database
  • PDO (Object-Oriented DB Access)
  • SQL Query (SELECT)
  • Looping (while)
  • Array Asosiatif
  • Error Handling (try-catch)
  • Dynamic HTML

πŸš€ 11. Insight (Level Developer)

Kalau mau naik level, perhatikan ini:

❗ Kelemahan kode sekarang:

  • Belum pakai prepared statement
  • Belum ada pagination
  • Belum ada sanitasi output (XSS)

βœ… Versi lebih aman (contoh konsep)

  • Gunakan:
$stmt = $conn->prepare("SELECT * FROM siswa");
$stmt->execute();

πŸ“Œ Kesimpulan

Kode ini adalah contoh klasik:

πŸ‘‰ PHP + PDO + MySQL + HTML Table

Digunakan untuk:

  • Menampilkan data dari database
  • Dasar semua CRUD aplikasi web

Kalau mau, saya bisa bantu lanjut ke:

  • πŸ”₯ versi CRUD lengkap (insert, edit, delete)
  • πŸ”₯ integrasi ke API Laravel (sesuai project kamu Flutter)
  • πŸ”₯ pagination + search seperti DataTables

Tinggal bilang πŸ‘