Logo Catatan Kader Logo Catatan Kader
  • Beranda
Beranda
Backend Engineering / PHP Database

Modul 2: Koneksi Database PDO

Database Server Concept

Modul 02

"Komunikasi Aman dan Efisien dengan MySQL"

Diperbarui Terakhir
45 Menit Eksekusi

Mengapa kita menggunakan PDO (PHP Data Objects) dan bukan mysqli? PDO mendukung banyak jenis database (MySQL, PostgreSQL, SQLite, dll) hanya dengan sintaks yang sama, dan yang paling penting: PDO murni berbasis Object-Oriented (OOP).

Interaksi Database

Implementasi PDO di PHP

01 Membuat Koneksi (Instansiasi)

Kita menggunakan blok try...catch untuk menangkap *Exception* (error) jika koneksi gagal. DSN (Data Source Name) menyimpan informasi host dan nama database.

<?php
$host = '127.0.0.1';
$db   = 'catatan_kader';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

// Data Source Name (DSN)
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

try {
    // Membuat Object PDO
    $pdo = new PDO($dsn, $user, $pass);
    
    // Set Error Mode ke Exception
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Koneksi berhasil!";
} catch (\PDOException $e) {
    // Jika error, lemparkan pesan gagal
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

02 Prepared Statements (Anti SQL Injection)

Jangan pernah memasukkan variabel langsung ke dalam string query SQL. Gunakan metode prepare() dan execute() untuk membersihkan input data dari user.

<?php
// Data dari input form user
$id_user = $_GET['id'];

// ❌ CARA SALAH (Rentan SQL Injection)
// $stmt = $pdo->query("SELECT * FROM users WHERE id = $id_user");

// ✅ CARA BENAR (Prepared Statement)
$sql = "SELECT * FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);

// Eksekusi dengan mengikat parameter
$stmt->execute(['id' => $id_user]);

03 Fetching Data (Mengambil Hasil)

Setelah query dieksekusi, kita harus menarik datanya. Anda bisa menggunakan fetch() untuk 1 baris, atau fetchAll() untuk banyak baris. Parameter PDO::FETCH_OBJ akan mengembalikan data sebagai Object PHP.

<?php
// Mengambil semua baris data user
$stmt = $pdo->query("SELECT nama, email FROM users");

// Ambil sebagai Array dari Object
$users = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ($users as $user) {
    // Karena Object, kita panggil menggunakan -> (bukan index array)
    echo $user->nama . " | " . $user->email . "<br>";
}
Kader Note (Keamanan Database):

Konsep Prepared Statements sangat krusial. Framework modern seperti Laravel menggunakan Query Builder dan Eloquent ORM yang secara otomatis membungkus interaksi database Anda dengan PDO Prepared Statements di balik layar. Dengan memahami ini, Anda tahu *kenapa* Laravel aman.

Kembali ke Beranda Lanjut ke Modul 3: Keamanan & SQL Injection

Catatan Kader

"Eloquent ORM di Laravel sangat memanjakan kita saat query data. Namun, mengerti logika PDO murni akan menyelamatkan Anda saat harus melakukan optimasi query kompleks atau debugging."
- Abdul Kader
Catatan Kader Catatan Kader

Catatan ini dikelola untuk keperluan dokumentasi pribadi, pengembangan kemampuan analisis logika, serta standarisasi implementasi sistem teknologi.

© 2026 Catatan Kader. Deployment Active.