Setelah membahas tentang pengertian PDO dan cara mengaktifkan driver PDO di dalam PHP, pada tutorial PHP MySQL kali ini kita akan membahas cara membuat koneksi PHP MySQL dengan PDO (PHP Data Object).
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:
$dbh = new PDO('mysql:host=lokasi_db;dbname=nama_database', "nama_user", "password_user");
Variabel $dbh adalah variabel yang akan menjadi object PDO. Object ini biasa disebut sebagai "Database Handler". Object inilah yang nantinya akan kita gunakan untuk menjalankan perintah-perintah PDO. Nama variabel boleh bebas, dan tidak harus $dbh.
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):
- $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
- $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
- $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
PDO::ERRMODE_SILENT adalah pilihan default. Jika kita tidak mengubah setingan error, pilihan inilah yang digunakan. Untuk mengecek error, kita bisa menggunakan method PDO::errorCode() dan PDO::errorInfo().
PDO::ERRMODE_WARNING digunakan untuk menampilkan error berupa warning PHP, kemudian PHP akan melanjutkan proses eksekusi program. Pilihan ini cocok untuk proses debugging.
PDO::ERRMODE_EXCEPTION digunakan untuk menampilkan error dengan exceptions. Pilihan inilah yang sering digunakan untuk menampilkan error dengan TRY…CATCH.
Dengan menggunakan penanganan kesalahan (exceptions), berikut adalah modifikasi kode PHP untuk koneksi PDO dengan MySQL:
<?php try { // buat koneksi dengan database $dbh = new PDO('mysql:host=localhost;dbname=universitas', "root", ""); Â // set error mode $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); Â // 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:
Koneksi atau query bermasalah: SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database 'universitas'
Didalam block TRY…CATCH inilah nantinya kita akan menjalankan query-query MySQL seperti menampilkan data, maupun menginput data baru ke dalam tabel MySQL. Untuk cara menampilkan data tabel MySQL menggunakan PDO, akan kita bahas dalam tutorial berikutnya: Cara Menampilkan data MySQL menggunakan PDO (PHP Data Object).
Min mau tanya, kalo misalkan saya mau pilih table yang mau di input itu mesti gimana min ?
Tabelnya mesti sudah disiapkan dulu gan, bisa dibuat manual pakai cmd, atau pakai phpMyAdmin.
Mas Andre, kalau seumpama tidak memanggil PDO::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) juga bisa ya? (saya coba tidak ada efek mas)
Berarti itu hanya opsional?
Iya mas, perintah diatas opsional untuk menampilkan pesan kesalahan. Kalaupun tanpa perintah ini, koneksi PHP MySQL dengan PDO tetap jalan kok.
min mau tanya, ane kurang paham tentang pdo ni. jika saya sudah membuat web jadi, dengan mysql_connect, lalu saya ingin merubah ke pdo, di bagian apa saja yang harus saya rubah?
terima kasih
Terpaksa mengubah seluruh kode program yang berkaitan dengan PHP gan, soalnya PDO dengan mysql extension biasa beda cukup jauh.
Ibarat kita pindah dari belajar nyetir mobil biasa dengan mobil balap. Sama2 mobil, tapi banyak bedanya :)
min mau tanya, cara untuk execute data dari table di database dengan pdo ?
Silahkan lanjut ke tutorial part selanjutnya, akan dibahas tentang cara menampilkan dan menginput data dengan PDO.
Min mau tanya, pada sintaks "PDOException $e" yg dimaksud $e itu apa yah? Masih blm ngerti sampe skg. Apa itu variabel yg berdiri sendiri gitu?
Thanks
Variabel $e itu disebut sebagai Exception Object. Di dalam konsep OOP biasanya ada yang seperti ini (tidak hanya PHP saja). Penjelasannya cukup panjang, karena berkaitan dengan block try catch dan pemrograman object PHP.
Singkatnya, variabel $e itu berisi kode error yang terjadi di dalam block try catch.
Mas tanya, kenapa muncul error
Fatal error: Call to undefined function setAttribute() in…
padahal driver pdo untuk MYSQL sudah diaktifkan ?
mohon penjelasanya mas..
Kalo g salah setAttribute() itu fungsi / method bawaan JavaScript, bukan punya PHP dan tidak ada hubungannya dengan PDO.
Ini menggunakan kode yang sudah jadi y? bisa coba tanyakan ke programmer yang membuat kode programnya…
sudah bisa mas, ternyata kurang teliti
terima kasih tutorialnya, sangat membantu.
ditunggu versi full MYSQL uncovernya mas :)
Hehe.. siip.
Mau tanya, saya menggunakan xamp v.3.2.2 php5,, kemaren mencoba koneksi dengan PDO tap eror
apakah PDO cuman support untuk php7 keatas ??
Seharusnya tidak ada masalah, PDO sudah ada di sejak PHP 5.1. Mungkin yang error di penulisan kode programnya…
Maturnuwun ilmunya :)
min mau nanya, apa perintah "try dan catch" harus ada disetiap pemuatan koneksi?
Tidak harus, itu hanya untuk penanganan jika terdapat error.