Modul 2: Koneksi Database PDO
Modul 02
"Komunikasi Aman dan Efisien dengan MySQL"
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).
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>";
}
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.