PDO (PHP Data Objects)
PDO (PHP Data Objects)
PDO (PHP Data Objects) adalah interface universal yang disediakan PHP
untuk “berkomunikasi” dengan database server. Maksud istilah
“interface universal” disini adalah bahwa PDO tidak terikat dengan aplikasi
database tertentu. Apabila saat ini kita menggunakan database MySQL dan
dikemudian hari ingin bermigrasi menggunakan PostgreSQL, kita hanya
tinggal mengganti cara pemanggilan awal PDO dan seluruh kode program
yang ada bisa langsung digunakan untuk database baru.
Kondisi ini berbeda jika menggunakan mysql extension atau mysqli
extension. Kedua extension ini hanya bisa bekerja dengan database
MySQL. Karena alasan inilah banyak sebaiknya kita mulai beralih
menggunakan PDO dibandingkan mysqli.
Walaupun PDO Extension telah aktif secara “default” pada PHP versi 5.1 keatas, tetapi tidak
semua database driver bisa digunakan. Dengan kata lain, untuk alasan performa, PHP me-
nonaktifkan beberapa driver database seperti Oracle atau PostgreSQL di dalam PDO.
Untuk melihat driver database apa saja yang telah aktif dan bisa langsung digunakan, bisa
menggunakan fungsi (lebih tepatnya: static method) PDO::getAvailableDrivers():
<?php
print_r(PDO::getAvailableDrivers());
?>
Ketika saya menjalankan perintah tersebut pada PHP 5.6 bawaan XAMPP, berikut adalah hasil
yang didapat:
Dari tampilan diatas, dapat dilihat bahwa driver PDO bawaan PHP yang aktif (dan yang bisa
digunakan) hanyalah MySQL dan SQLite. Jadi bagaimana cara mengaktifkan driver untuk
database lainnya? Caranya adalah mengubah setingan php.ini.
Silahkan buka file php.ini dengan aplikasi text editor, kemudian search kata “pdo”. Dalam versi PHP
yang saya gunakan, hasil pencarian “pdo” akan tampil pada baris ke-1010, seperti gambar dibawah:
Pada baris inilah kita mengaktifkan driver database PDO. Perhatikan library yang diawali dengan “php_pdo“,
inilah driver-driver database PDO yang tersedia di dalam PHP. Dapat dilihat driver yang telah aktif
hanya php_pdo_mysql.dll dan php_pdo_sqlite.dll.
Untuk mengaktifkannya, silahkan hapus tanda titik koma (;) dari awal baris nama driver yang ingin
digunakan. Sebagai contoh, saya akan mengaktifkan extension=php_pdo_pgsql.dll yang merupakan
driver dari database PostgreSQL:
Selanjutnya, save file php.ini, kemudian restart web server Apache (matikan dan hidupkan kembali
melalui XAMPP Control Panel).
Untuk memastikan apakah driver telah aktif atau belum, kita kembali menjalankan
method PDO::getAvailableDrivers(), dan berikut adalah hasil yang didapat:
Array ( [0] => mysql [1] => pgsql [2] => sqlite )
Seperti yang terlihat, driver PostgreSQL untuk PDO telah aktif dan bisa langung digunakan.
Cara Membuat Koneksi PHP MySQL dengan PDO
Membuat koneksi PHP MySQL dengan PDO constructor
Karena PDO adalah fungsi/fitur PHP yang ditulis menggunakan objek, maka untuk membuat koneksi
antara PHP dengan MySQL, kita menggunakan PDO constructor, yakni dengan membuat objek baru
dari class PDO (menggunakan keyword: new).
Berikut adalah struktur dasar cara penulisan PDO constructor untuk database MySQL:
Argumen dari constructor PDO terdiri dari 3 bagian, bagian pertama berisi nama
database server (misalnya:mysql) kemudian diikuti dengan alamat server dan nama
database, semuanya di dalam 1 string. Untuk argumen kedua diisi dengan nama user,
dan argumen ketiga berisi password user.
Sebagai contoh, untuk masuk ke dalam MySQL server di komputer localhost, dengan
user root, password: 12345, nama database: universitas, kode PDO yang digunakan
adalah sebagai berikut:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=universitas', "root", "12345");
?>
Setelah membuat koneksi PDO, untuk menghapus koneksi kita tinggal memberikan
nilai “null” kepada variabel “Database Handler” sebagai berikut:
<?php
$dbh = null;
?>
Sama seperti mysqli, proses penutupan koneksi ini bersifat opsional, dan PHP
secara otomatis akan menghapus koneksi pada saat halaman PHP selesai
dijalankan.
Cara Menampilkan Pesan Kesalahan (error) pada PDO
Karena PDO menggunakan object, penanganan kesalahan akan lebih baik jika menggunakan
blok TRY…CATCH, atau dikenal dengan “exceptions”.
Untuk menampilkan pesan kesalahan dengan exceptions pada PDO, terdapat 3 pilihan metode.
Ketiga metode ini menggunakan method PDO::setAttribute(PDO::ATTR_ERRMODE):
// hapus koneksi
$dbh = null;
}
catch (PDOException $e) {
// tampilkan pesan kesalahan jika koneksi gagal
print "Koneksi atau query bermasalah: " . $e->getMessage() . "<br/>";
die();
}
?>
Sebagai contoh, jika saya mengganti nama user menjadi “user_tetangga” yang memang
tidak ada di dalam database, berikut tampilan error yang terjadi:
Didalam block TRY…CATCH inilah nantinya kita akan menjalankan query-query MySQL seperti
menampilkan data, maupun menginput data baru ke dalam tabel MySQL.