Koneksi Data
<?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:
namaalamattgl_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 databasehostβ alamat serverdbnameβ nama databasecharset=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β warningEXCEPTIONβ 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:
- PHP ambil data dari DB
- PHP generate HTML
- 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
$notetap 1 β belum bertambah
π colspan='4':
- Menggabungkan 4 kolom jadi 1
π¨ 8. CSS Styling
table {
border-collapse: collapse;
}
Teori:
border-collapseβ menggabungkan bordermargin autoβ posisi tengahthβ header tabel
π 9. Alur Eksekusi Program (WAJIB PAHAM)
Urutan yang terjadi:
-
Browser request halaman PHP
-
Server menjalankan PHP
-
PHP:
- konek ke database
- jalankan query
- ambil data
-
PHP generate HTML
-
HTML dikirim ke browser
-
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 π