Saat membangun aplikasi web dengan PHP, koneksi ke database adalah langkah yang hampir selalu diperlukan. PHP menyediakan beberapa cara untuk terhubung ke MySQL, namun cara yang paling direkomendasikan saat ini adalah menggunakan PDO (PHP Data Objects). PDO memberikan antarmuka yang konsisten untuk berbagai jenis database, mendukung prepared statements untuk keamanan, dan lebih mudah dikelola dibandingkan fungsi mysql_* lama yang sudah tidak didukung.
Mengapa Menggunakan PDO?
Sebelum mulai kode, ada baiknya kita pahami keunggulan PDO dibanding cara lama:
- Database agnostic — kode yang sama bisa dipakai untuk MySQL, PostgreSQL, SQLite, dan lainnya dengan perubahan minimal.
- Prepared statements bawaan — melindungi dari SQL Injection secara otomatis.
- Penanganan error yang baik — bisa melempar exception sehingga mudah di-debug.
- Dukungan aktif — terus dikembangkan dan direkomendasikan di PHP modern.
Syarat Sebelum Mulai
Pastikan ekstensi PDO dan PDO_MySQL sudah aktif di instalasi PHP kamu. Cek dengan membuat file phpinfo.php dan cari bagian PDO, atau jalankan perintah berikut di terminal:
php -m | grep -i pdo
Hasilnya harus menampilkan PDO dan pdo_mysql. Jika belum aktif, aktifkan di file php.ini dengan menghapus tanda titik koma di depan baris extension=pdo_mysql.
Membuat Koneksi PDO Dasar
Berikut cara membuat koneksi PDO paling dasar ke database MySQL:
<?php
$host = 'localhost';
$dbname = 'nama_database';
$username = 'root';
$password = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
try {
$pdo = new PDO($dsn, $username, $password);
echo "Koneksi berhasil!";
} catch (PDOException $e) {
echo "Koneksi gagal: " . $e->getMessage();
}
DSN (Data Source Name) adalah string yang memberitahu PDO jenis database apa yang digunakan, alamat server, nama database, dan charset. Blok try-catch digunakan untuk menangkap error koneksi tanpa menampilkan pesan error mentah ke pengguna.
Mengatur Mode Error PDO
Secara default, PDO tidak melempar exception saat terjadi error query. Kamu perlu mengatur atribut ERRMODE_EXCEPTION agar error mudah terdeteksi selama pengembangan:
<?php
$dsn = "mysql:host=localhost;dbname=nama_database;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, 'root', '', $options);
echo "Koneksi berhasil dengan pengaturan lengkap!";
} catch (PDOException $e) {
// Di production, jangan tampilkan pesan error ke user
error_log($e->getMessage());
die("Terjadi kesalahan pada koneksi database.");
}
Tiga opsi yang diset di atas sangat direkomendasikan:
ERRMODE_EXCEPTION— lempar exception saat error, memudahkan debugging.FETCH_ASSOC— hasil query dikembalikan sebagai array asosiatif (lebih mudah dibaca).EMULATE_PREPARES = false— gunakan prepared statements native MySQL, lebih aman.
Memisahkan Koneksi ke File Terpisah
Praktik terbaik adalah menyimpan konfigurasi koneksi di file terpisah agar mudah dikelola dan tidak perlu menulis ulang setiap kali:
<?php
// File: config/database.php
function getConnection(): PDO
{
static $pdo = null;
if ($pdo === null) {
$host = $_ENV['DB_HOST'] ?? 'localhost';
$db = $_ENV['DB_NAME'] ?? 'nama_database';
$user = $_ENV['DB_USER'] ?? 'root';
$pass = $_ENV['DB_PASS'] ?? '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);
}
return $pdo;
}
Kemudian di file lain, cukup panggil fungsinya:
<?php
// File: index.php
require_once 'config/database.php';
$pdo = getConnection();
$stmt = $pdo->query("SELECT * FROM users LIMIT 5");
$users = $stmt->fetchAll();
foreach ($users as $user) {
echo $user['nama'] . "<br>";
}
Tips Keamanan Tambahan
- Simpan kredensial database di file
.envatau variabel lingkungan, bukan langsung di kode. - Pastikan file konfigurasi tidak bisa diakses langsung melalui browser (simpan di luar folder
public). - Selalu gunakan prepared statements saat menerima input dari pengguna — akan dibahas lebih lanjut di artikel CRUD.
- Gunakan charset
utf8mb4untuk mendukung emoji dan karakter khusus.
Kesimpulan
PDO adalah cara terbaik untuk koneksi database MySQL di PHP modern. Dengan menggunakan PDO, kamu mendapatkan keamanan lebih baik melalui prepared statements, penanganan error yang rapi, dan kode yang lebih mudah dipelihara. Pastikan selalu mengatur opsi error mode, fetch mode, dan simpan kredensial di tempat yang aman. Setelah koneksi berhasil dibuat, kamu siap melakukan operasi CRUD pada database.