Apabila anda mengikuti seluruh tutorial belajar PHP MySQL di duniailkom, hingga saat ini kita telah mempelajari cara menggunakan mysql extension dan mysqli extension. Selain kedua metode ini, terdapat 1 lagi cara untuk menghubungkan antara PHP dengan MySQL, yakni menggunakan PDO extension. Dalam tutorial kali ini (dan beberapa tutorial berikutnya) kita akan membahas lebih dalam tentang PDO.
Pengertian 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.
Secara teknis, apabila menggunakan mysql atau mysqli extension, PHP langsung berhubungan dengan MySQL Server, tetapi jika menggunakan PDO, ia tidak berhubungan langsung dengan database, tetapi hanya sebagai "interface". Konsep PDO ini dapat digambarkan sebagai berikut:
PHP PDO –> Database Driver –> Database Server
PDO bekerja dengan metode yang disebut "data-access abstraction layer". Artinya, apapun jenis database server yang digunakan, kode PHP yang ditulis akan tetap sama. PDO menyediakan "abstraction layer" untuk berkomunikasi dengan database server.
Untuk menggunakan PDO, kita harus mengaksesnya menggunakan object. PDO tidak menyediakan cara penulisan procedural style seperti mysqli atau mysql extension. Karena itu, jika anda kurang paham tentang istilah pemrograman object seperti class, method, dan property, silahkan mempelajarinya pada Tutorial Pemrograman Object PHP untuk pemula yang telah tersedia di duniailkom.
Jenis Database Server yang didukung PDO
Hingga saat penulisan tutorial ini (PHP versi 5.6) PDO mendukung setidaknya 12 jenis Interface/Database Server:
- CUBRID
- MS SQL Server
- Firebird
- IBM
- Informix
- MySQL
- MS SQL Server
- Oracle
- ODBC and DB2
- PostgreSQL
- SQLite
- 4D
List ini dapat anda lihat dari http://php.net/manual/en/pdo.drivers.php.
Dapat dilihat bahwa PDO mendukung banyak aplikasi database populer seperti: Oracle, Microsoft SQL Server, dan PostgreSQL. Dengan membuat kode PHP menggunakan PDO, secara tidak langsung kita juga membuka kemungkinan untuk menggunakan database server selain MySQL, sehingga menjadi lebih fleksibel.
Cara Mengaktifkan PDO Extension
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:
Array ( [0] => mysql [1] => sqlite )
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.
File php.ini adalah file konfigurasi yang digunakan PHP. Saya telah membahas sekilas tentang cara menemukan dan mengakses file php.ini dalam tutorial Cara Mengubah File Konfigurasi PHP (php.ini). Karena saya menggunakan PHP yang diinstall dari XAMPP di drive D, lokasinya adalah: D:\xampp\php\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.
"The program can't start because OCI.dll is missing from your computer"
Error diatas terjadi karena PHP tidak menyertakan library php_pdo_oci.dll, dan kita harus mendownloadnya secara manual.
Setelah saya mencari dari beberapa sumber, ternyata PDO untuk oracle masih berstatus "experiment", dan dikembangkan oleh komunitas, bukan Oracle sendiri.
Hal ini bisa menjadi pertimbangan jika anda ingin menggunakan PDO untuk mengakses database Oracle. Sebagai alternatif, silahkan gunakan fungsi oracle "biasa": oci8.
Dalam tutorial PHP MySQL kali ini kita telah membahas tentang pengertian PDO dan cara mengaktifkan driver database agar bisa diakses menggunakan PDO. Pada tutorial selanjutnya, kita akan mulai masuk kedalam kode program yang digunakan untuk menghubungkan PHP dengan database MySQL menggunakan PDO dalam tutorial Cara Membuat Koneksi PHP MySQL Menggunakan PDO.
Permisi gan,mau nanya
Saya dapat tugas install modul php 53 pgsql di freebsd 9.Sudah saya install (//usr/ports/databases/php53-pgsql dan saya lihat phpinfo modul pgsql nya belum ada di php.waktu saya lihat menggunakan command php -m sudah ada modul pgsql.Apakah mungkin install module pgsql tanpa install database pgsql?
Mohon maaf gan, saya belum bisa bantu karena belum pengalaman install pgsql di freebsd.. :)
Tapi menurut saya kalau sekedar untuk mengaktifkan modul pgsql, bisa dilakukan tanpa install database pgsqlnya, walaupun tentu saja kita tidak bisa mengakses database.
Untuk mengaktifkannya tinggal mengubah konfigurasi file php.ini. PDO-Pgsql diaktifkan melalui modul extension=php_pdo_sqlite.dll, sedangkan untuk driver 'native' PHP-Pgsql diaktifkan melalui modul extension=php_pgsql.dll (untuk PHP versi windows).
kalau saya lihat PDO ekstensions muncul hasil seperti ini
[0] => mysql
[1] => sqlite
[2] => pgsql
itu tandanya modul php pgsql sudah ke load apa gimana?
mohon pencerahanya :)
Betul gan, berarti modul PHP-PDO pgsql sudah berjalan. Tetapi sama seperti MySQL, PHP menyediakan 2 buah mekanisme untuk dapat berkomunikasi dengan pgsql, yakni dengan PDO dan dengan modul khusus pgsql yang diakses dengan fungsi pg_connect().
Agan bisa memilih menggunakan PDO atau modul pgsql ini. (Modul pgsql juga harus diaktifkan melalui php.ini)
baru tau saya ……kalau pdo saya seperti itu baru tau ketika blog saya yang pake cms drupal langsung fatal eror setelah pindah server udah gitu saya langsung hubungi penyedia hosting katanya servetnya tidak dukung pdo…..makasih gan
Terimakasih juga atas kunjungannya gan :)
apakah PDO ini sama dengan ORM gan ?
Maksudnya ORM = Object-Relational Mapping y? kalau iya, keduanya berbeda gan.
PDO cuma sebagai sebagai penghubung antara PHP dengan MySQL. PDO menyediakan berbagai method untuk berkomunikasi dengan database.
Sedangkan ORM berada 1 tingkat diatasnya. ORM adalah fitur tambahan dengan memodelkan isi database sebagai objek. PHP tidak menyediakan ORM secara bawaan. Kita harus menggunakan library seperti doctrine. Beberapa framework juga menggunakan ORM sebagai sarana input/output database. Sebuah library ORM kemungkinan besar menggunakan PDO sebagai landasannya.
Sebagai contoh, jika dalam PDO kita menggunakan query MySQL secara langsung:
$result = $dbh->query("SELECT * FROM user WHERE nama='joko' ");
Maka dengan menggunakan ORM bisa ditulis sebagai berikut:
$model = user::where('nama', '=', 'joko');
Mas Andre,
berarti kalau kita pengen terjun pakek "PDO", semua codingan PHP yg kita buat harus "OOP" ya?
saya sudah sedikit mengerti tentang OOP di PHP, tapi malah bingung ketika pengen implementasi ke CRUD di PHP :D
Sebaiknya memang begitu, tapi g salah kok kalau kita tetap mencampurkan cara penulisan OOP dengan prosedural, terutama untuk proyek yang sederhana.
Dari pengalaman saya, full OOP agak susah diimplementasikan kalau kita belum paham tentang Design Pattern, yakni teknik penggunaan OOP. Untuk pengaksesan database seperti pembuatan CRUD, bisa menggunakan desain Active Record atau ORM (Object-Relational Mapping). Keduanya sering digunakan di dalam framework seperti Laravel, Code Igniter, Symfony, dll.
Tapi untuk menguasainya memang harus paham luar dalam tentang OOP PHP :)
iya bener mas, ini aj tak campur sama procedural :D
o iya mas, saya sering menemukan error seperti ini di PDO :
Fatal error: Call to a member function fetch() on a non-object in bla bla bla
hal tersebut sering saya temukan ketika menggunakan ->prepare dan ->fetch(PDO::FETCH_OBJ) mas
Mas, untuk PDO bisa gak menggunakan dua database yang berbeda, misalkan menggunakan mysql dan odbc. trims, kalo bisa punya link buat belajarnya gak ya ?
Bisa saja mas, tinggal dibedakan pada saat pemanggilan awalnya.
Misalnya untuk MySQL pakai:
$dbh1 = new PDO('mysql:host=localhost;dbname=universitas', "root", "12345");
Untuk SQLite bisa pakai
$dbh2 = new PDO("sqlite:my/database/path/database.db");
Sekarang objek $dbh1 dan $dbh2 sudah berisi koneksi ke database yang berbeda.
mas andre the master of PHP kalo pemanggilan database mysql semua denganpdo bisa gag?
dan kalo lebih complek dengan bda server
Mas mau tannya apakah PDO ini nantinya banyak di gunakan di sekolah"an?
saya sendiri sebelumnya menggunakan xampp versi lama dan saya kemaren install xampp versi terbaru, beberapa web local saya error saya tannya ke grub" ternyata xampp versi baru pakai pdo,.
Maksudnya diajarkan di sekolah mas? Kalau itu sih tergantung pengajarnya, hehe…
PDO ini hanya alternatif penulisan. PHP terbaru juga menyediakan koneksi mysqli extension (perbaikan dari fungsi mysql yang lama).
Untuk pemula sebaiknya pakai mysqli saja, lebih mudah dan simple. Karena untuk bisa menggunakan PDO minimal sudah paham pemrograman object PHP (OOP).
kalo sqlsrv jga trmasuk driver serupa spt pgsql,sqlite dan mysql min?
Yup betul, itu driver atau extension PHP untuk database SQL Server punya Microsoft. Hanya saja SQL Server ini relatif jarang dipakai dengan PHP, lebih cocok pakai ASP yang sama2 punya Microsoft.
Bikin Tutorial Codeigniter PDO dulu bos.?
Kalau di CI, tidak perlu pakai PDO. Karena nanti akan pakai "query builder" bawaan CI.
Requestnya di tampung untuk tutorial CI…
permisi mau tanya gimana buat koneksinya ke sql oracle dengan pdo juga untuk buat halaman data dengan perintah select menampilkan halaman2 data seperti data penduduk atau biodata dari sql oracle koneksinya gimana. tks
Mohon maaf, kebetulan saya juga belum mempelajari cara mengakses Oracle dari PHP, jadi belum bisa ngasih solusi…
gan mau tanya kalo misalya kita menggunakan library pdo itu dhosting ko halamannya ga kebuka ya apakah ada configurasi tambahnnya?
Seharusnya g perlu konfigurasi lagi. Tapi jika halamannya tidak bisa di buka, kemungkinan besar ada masalah di kode program lain (bukan PDO).