Penggunaan fungsi EXCECUTE pada PHP

Dalam 2 tutorial PDO PHP sebelumnya, kita telah membahas cara menampilkan dan menginput data MySQL dengan cara “normal”. Pada tutorial belajar PHP MySQL kali ini kita akan membahas cara menjalankan query MySQL dengan metoda yang lebih advanced menggunakan prepared statements dengan PDO.


Cara Menginput Data MySQL dengan Prepared Statement PDO

Pembahasan mengenai apa itu prepared statement telah saya bahas dengan lengkap dalam Tutorial PHP MySQL: Pengertian dan Cara Penggunaan Prepared Statements mysqli. Kali ini kita akan lihat bagaimana cara menggunakannya di dalam extension PDO.

Langsung saja kita masuk kedalam contoh program. Kali ini saya ingin menambahkan 1 data kedalam tabel mahasiswa_ilkom menggunakan prepared statement dengan PDO:

<?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);
 
   // siapkan query (prepare)
   $stmt = $dbh->prepare('INSERT INTO mahasiswa_ilkom 
   VALUES (?, ?, ?, ?, ?)');
 
   // hubungkan data dengan variabel (bind)
   $stmt->bindParam(1, $nim_mhs);
   $stmt->bindParam(2, $nama_mhs);
   $stmt->bindParam(3, $umur_mhs);
   $stmt->bindParam(4, $tempat_lahir_mhs);
   $stmt->bindParam(5, $ipk_mhs);

   // siapkan "data" query
   $nim_mhs="109023031";
   $nama_mhs="Jerry Kurniawan";
   $umur_mhs=23;
   $tempat_lahir_mhs="Malang";
   $ipk_mhs=3.1;
 
   // jalankan query (execute)
   $stmt->execute();
 
   // tampilkan hasil proses query
   echo $stmt->rowCount()." data berhasil ditambahkan";
 
   // hapus koneksi
   $dbh = null;

} catch (PDOException $e) {
   // tampilkan pesan kesalahan jika koneksi gagal
   print "koneksi/query bermasalah: " . $e->getMessage() . "<br/>";
   die();
}
?>

Seperti yang pernah kita bahas pada mysqli extension, untuk menjalankan prepared statement, kita membutuhkan 3 langkah: prepare, bind dan execute.

Proses prepare dijalankan menggunakan method $dbh->prepare(). Method ini membutuhkan 1 argumen berupa perintah query yang akan dijalankan. Hasil dari method kemudian disimpan kedalam variabel $stmt. Variabel inilah yang akan kita gunakan selama menjalankan proses prepared statement.

Proses bind dilakukan menggunakan method $stmt->bindParam(). Method ini membutuhkan 2 argumen. Argumen pertama adalah angka urutan dari “tempat data” yang ditulis pada proses prepare. Karena pada proses prepare saya menuliskan: ‘INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)’, maka setiap tanda “?” harus di bind. Urutan tanda “?” inilah yang digunakan dalam argumen pertama method $stmt->bindParam().

Untuk argumen kedua method $stmt->bindParam() adalah variabel penampung yang nantinya akan diisi data. Selanjutnya setiap variable yang di defenisikan akan saya input nilai yang sesuai.

Setelah seluruh data diinput kedalam variabel, kita tinggal menjalankan method $stmt->execute() untuk menjalankan query prepared statement.

Jika anda menjalankan kode program diatas, hasilnya adalah sebagai berikut:

1 data berhasil ditambahkan

Agar lebih yakin, anda bisa menambahkan kode program diatas untuk menampilkan seluruh isi tabel mahasiswa_ilkom.

Selain menggunakan tanda “?” untuk menandakan bagian dari data, PDO PHP juga menyediakan cara lain, yakni dengan menuliskan ‘nama untuk data’ atau dikenal dengan “named parameters prepared statements”.

Berikut adalah revisi contoh program menggunakan named parameters prepared statemant:

<?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);
 
   // siapkan query (prepare)
   $stmt = $dbh->prepare('INSERT INTO mahasiswa_ilkom VALUES
   (:nim_mhs, :nama_mhs, :umur_mhs, :tempat_lahir_mhs, :ipk_mhs)');
 
   // hubungkan data dengan variabel (bind)
   $stmt->bindParam(':nim_mhs', $nim_mhs);
   $stmt->bindParam(':nama_mhs', $nama_mhs);
   $stmt->bindParam(':umur_mhs', $umur_mhs);
   $stmt->bindParam(':tempat_lahir_mhs', $tempat_lahir_mhs);
   $stmt->bindParam(':ipk_mhs', $ipk_mhs);
                
   // siapkan "data" query
   $nim_mhs="109023031";
   $nama_mhs="Jerry Kurniawan";
   $umur_mhs=23;
   $tempat_lahir_mhs="Malang";
   $ipk_mhs=3.1;
 
   // jalankan query (execute)
   $stmt->execute();
 
   // tampilkan hasil proses query
   echo $stmt->rowCount()." data berhasil ditambahkan";
 
   // hapus koneksi
   $dbh = null;

} catch (PDOException $e) {
   // tampilkan pesan kesalahan jika koneksi gagal
   print "koneksi/query bermasalah: " . $e->getMessage() . "<br/>";
   die();
}
?>

Perbedaan dari kode program sebelumnya adalah pada cara penulisan query dan argumen method bindParam(). Kali ini kita menggunakan named variable (diawali dengan tanda “:”), seperti :nim_mhs, :nama_mhs, atau :umur_mhs. Named variable ini selanjutnya menjadi argumen pertama method $stmt->bindParam().

Versi penulisaan terakhir prepared statement yang akan kita pelajari adalah dengan menggabungkan proses bind dan execute sekaligus. Agar cara ini bisa dijalankan, data dari prepared statement harus dibuat dalam bentuk array. Berikut contohnya:

<?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);
 
   // siapkan query (prepare)
   $stmt = $dbh->prepare('INSERT INTO mahasiswa_ilkom VALUES
   (:nim_mhs, :nama_mhs, :umur_mhs, :tempat_lahir_mhs, :ipk_mhs)');
                
   // siapkan "data" query
   $nim_mhs="109023031";
   $nama_mhs="Jerry Kurniawan";
   $umur_mhs=23;
   $tempat_lahir_mhs="Malang";
   $ipk_mhs=3.1;
 
   // jalankan query (execute)
   $stmt->execute(array(':nim_mhs' => $nim_mhs, ':nama_mhs' => $nama_mhs,
   ':umur_mhs' => $umur_mhs, ':tempat_lahir_mhs' => $tempat_lahir_mhs,
   ':ipk_mhs' => $ipk_mhs ));
 
   // tampilkan hasil proses query
   echo $stmt->rowCount()." data berhasil ditambahkan";
 
   // hapus koneksi
   $dbh = null;

} catch (PDOException $e) {
   // tampilkan pesan kesalahan jika koneksi gagal
   print "koneksi/query bermasalah: " . $e->getMessage() . "<br/>";
   die();
}
?>

Perbedaan dalam kode program diatas terletak dalam $stmt->execute(). Kali ini method $stmt->execute() kita input dengan array sebagai argumen yang akan menjadi ‘data’ untuk query. Dengan cara ini kita tidak perlu menggunakan method $stmt->bindParam().


Metode prepared statement yang kita pelajari disini bisa menjadi alternatif dari cara menjalankan query MySQL dengan metode biasa menggunakan $dbh->query(). Prepared statements mungkin masih relatif jarang anda jumpai, namun metoda ini menawarkan keamanan yang lebih dan banyak digunakan di dalam aplikasi PHP yang lebih luas seperti framework PHP.

Apa fungsi PDO?

PDO bertujuan untuk membuat satu buah interface yang seragam untuk koneksi ke beragam jenis database. Ketika Anda menggunakan database yang didukung oleh PDO seperti misalnya MySQL, Oracle, MS.

Apa yang dimaksud dengan PDO?

"PDO - PHP Data Objects - adalah lapisan akses database yang menyediakan metode akses yang seragam ke beberapa database." Ini tidak memperhitungkan sintaks database-spesifik, namun memungkinkan proses peralihan database dan platform menjadi lebih mudah, cukup dengan mengganti string koneksi dalam banyak instance.

Apa itu prepared statement?

Prepared statements adalah sebuah fitur yang disediakan MySQL (dan juga beberapa aplikasi database lainnya), dimana kita bisa mengirim query (perintah) secara terpisah antara query inti dengan “data” dari query. Tujuannya, agar query menjadi lebih aman dan cepat (jika perintah yang sama akan digunakan beberapa kali).