Database dengan PDO — PHP

PDO (PHP Data Objects) adalah cara standar PHP berkomunikasi dengan database. Koneksi (selalu bungkus dengan try/catch): $dsn = "mysql:host=localhost;dbname=mya

PDO (PHP Data Objects) adalah cara standar PHP berkomunikasi dengan database.

Koneksi (selalu bungkus dengan try/catch):

$dsn = "mysql:host=localhost;dbname=myapp;charset=utf8mb4";
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];

try {
    $pdo = new PDO($dsn, "root", "password", $options);
} catch (PDOException $e) {
    // JANGAN tampilkan $e->getMessage() ke user — bisa bocor password/DSN!
    error_log("DB connect failed: " . $e->getMessage());
    http_response_code(500);
    exit("Layanan sedang gangguan. Coba lagi nanti.");
}

Query dengan prepared statement (juga bungkus try/catch di kode produksi):

try {
    // SELECT
    $stmt = $pdo->prepare("SELECT * FROM users WHERE role = ?");
    $stmt->execute(["admin"]);
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // INSERT
    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
    $stmt->execute(["Budi", "[email protected]"]);
    $id = $pdo->lastInsertId();

    // UPDATE
    $stmt = $pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
    $stmt->execute(["Budi Santoso", 1]);

    // DELETE
    $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
    $stmt->execute([5]);
} catch (PDOException $e) {
    error_log("Query failed: " . $e->getMessage());
    // Tampilkan pesan ramah ke user, JANGAN expose $e->getMessage()
    exit("Terjadi kesalahan. Tim kami sudah diberi tahu.");
}

Error Handling dengan PDO:

Di PHP 8+, PDO::ERRMODE_EXCEPTION adalah default error mode — PDO akan melempar PDOException saat query gagal. Mode lain:

Kenapa bungkus dengan try/catch?

Aturan safe error messaging:

Named parameters (lebih jelas):

$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name AND age > :age");
$stmt->execute(["name" => "Budi", "age" => 20]);

PENTING: Selalu gunakan prepared statements!

Yang akan kamu pelajari