Tutorial PHP MySQL Part 20: Cara Membuat Koneksi PHP MySQL dengan PDO

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).

Dalam tutorial kali ini saya hanya fokus untuk membahas cara membuat koneksi, untuk cara menjalankan dan menampilkan data hasil query, akan kita bahas dalam tutorial selanjutnya.

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.

Walaupun dalam tutorial ini kita hanya membahas MySQL, sebagai perbandingan berikut adalah cara melakukan koneksi untuk database server MS SQL, Sybase dan SQLite:

Koneksi PDO untuk MS SQL Server Database:

$dbh = new PDO("mssql:host=$host;dbname=$dbname, $user, $pass");

Koneksi PDO untuk Sybase Database:

$dbh = new PDO("sybase:host=$host;dbname=$dbname, $user, $pass");

Koneksi PDO untuk SQLite Database:

$dbh = new PDO("sqlite:my/database/path/database.db");


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).

19 Comments

  1. Ijul
    26 Dec 15
    • Andre
      26 Dec 15
  2. Madyan
    26 Apr 16
    • Andre
      26 Apr 16
  3. hamdan
    27 Apr 16
    • Andre
      28 Apr 16
  4. Fenny DH
    12 Jul 16
    • Andre
      13 Jul 16
  5. Kurnain
    17 Nov 16
    • Andre
      19 Nov 16
  6. Arif
    18 Nov 17
    • Andre
      19 Nov 17
      • Arif
        20 Nov 17
        • Andre
          22 Nov 17
  7. M.Hilman
    28 Nov 17
    • Andre
      02 Dec 17
  8. Ardi
    29 Apr 19
  9. skay sleep
    15 Jul 20
    • Andre
      16 Jul 20

Add Comment