Tutorial PHP MySQL Part 16: Pengertian dan Cara Penggunaan Prepared Statements mysqli

Salah satu fitur baru yang tersedia di dalam mysqli extension yang tidak ada pada mysql extension adalah dukungan untuk prepared statements MySQL. Dalam tutorial belajar PHP MySQL kali ini kita akan membahas tentang pengertian prepared statements dan cara penggunaan prepared statements dengan mysqli.


PHP mendukung fitur prepared statements pada mysqli extension dan PDO. Fitur ini juga umum digunakan di dalam pemrograman PHP lanjutan seperti framework PHP. Karena hal ini, penting juga bagi kita untuk memahami cara penggunaannya.

Pengertian Prepared Statements MySQL

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

Sebagai perbandingan, untuk menampilkan data MySQL menggunakan fungsi mysqli_query(), kita membuat seluruh query dalam 1 string dan langsung mengirimkannya ke MySQL Server, sebagai berikut:

$result=mysqli_query("SELECT * FROM mahasiswa_ilkom WHERE 
nama='Neil Situmorang'");

Dengan prepared statements, query tersebut akan dipisah antara perintah query: “SELECT…” dengan ‘data’-nya yakni “Neil Situmorang”.


Proses Pembuatan Prepared Statement MySQL

Proses pembuatan prepared statements membutuhkan 3 langkah: Prepared, Bind, dan Execute.

Pada proses pertama: prepared, kita mempersiapkan query yang akan dijalankan, tetapi tanpa ‘data’. Bagian dimana ‘data’ berada digantikan dengan tanda tanya (?), seperti berikut ini:

"SELECT * FROM mahasiswa_ilkom WHERE nama=?"

atau

"INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)"

Secara teknis, query diatas akan langsung di kirim PHP ke MySQL Server. Di dalam MySQL, perintah tersebut disimpan untuk sementara menunggu proses berikutnya: bind.

Proses kedua adalah bind. Dalam tahap ini, kita akan mengirimkan data yang telah ditandai dalam proses prepare. Data disini adalah bagian yang diberi tanda “?”. Jika di dalam proses prepare hanya butuh 1 data, kita mengirimkan 1 data. Tetapi jika kita butuh 5 data, kita mengirimkan 5 data (sesuai dengan query yang ditulis dalam tahap prepare).

Setelah proses prepare dan bind, berikutnya adalah menjalankan prepared statement (execute).


Kenapa Harus Menggunakan Prepared Statements?

Keuntungan terbesar dari penggunaan prepared statements adalah dalam hal keamanan. Untuk aplikasi ‘nyata’, bagian “data” dari suatu query biasanya berasal dari user. Seorang user yang jahil bisa saja menambahkan perintah SQL pada kotak inputan user name. Metoda ini dikenal juga dengan SQL Injection.

Dengan memisahkan perintah query dengan datanya, kita bisa mencegah penyisipan query.


Cara Penggunaan Prepared Statements mysqli

Pembahasan mengenai prepared statements cukup panjang dan akan saya bahas secara bertahap dalam 2 tutorial berikutnya. Sebagai gambaran, berikut adalah contoh kode program untuk menampilkan data mahasiswa dari tabel mahasiswa_ilkom menggunakan prepared statement mysqli (procedural style). Penjelasan mengenai kode program ini akan kita bahas lengkap pada tutorial berikutnya:

<?php
// buat koneksi dengan MySQL, gunakan database: universitas
$link = mysqli_connect('localhost', 'root', '', 'universitas');

// cek koneksi
if (!$link) {
    die('Koneksi Error : '.mysqli_connect_errno().
    ' - '.mysqli_connect_error());
}

// buat prepared statements
$stmt = mysqli_prepare($link, "SELECT * FROM mahasiswa_ilkom WHERE nama=?");

// siapkan "data" query
$nama_mhs="Neil Situmorang";

// hubungkan "data" dengan prepared statements: bind
mysqli_stmt_bind_param($stmt, "s", $nama_mhs);

// jalankan query: execute
mysqli_stmt_execute($stmt);

// cek hasil query
if (!$stmt) {
    die('Query Error : '.mysqli_errno($link).
    ' - '.mysqli_error($link));
}

// ambil hasil query
$result=mysqli_stmt_get_result($stmt);

// tampilkan hasil query
while ($row= mysqli_fetch_row($result)) {
    echo "$row[0] $row[1] $row[2] $row[3] $row[4]";    
    echo "<br />"; 
    } 

// tutup statements
mysqli_stmt_close($stmt);

// tutup koneksi
mysqli_close($link);
?>

Jika kode program diatas dijalankan, hasilnya adalah sebagai berikut:

099145055 Neil Situmorang 22 Medan 1.90
Disini saya menggunakan database universitas, dan tabel mahasiswa_ilkom. Database dan tabel ini kita buat pada tutorial PHP MySQL: Cara Menampilkan Tabel MySQL dari PHP (mysql_fetch_row).

Dalam program diatas, saya menggunakan prepared statements untuk menampilkan data mahasiswa_ilkom dengan nama = “Neil Situmorang”. Saya akan membahas kode program diatas secara detail dalam tutorial berikutnya: Cara Menampilkan Data MySQL Menggunakan Prepared Statements mysqli.


Tutorial Terkait:

15 Comments

  1. zaid
    16 Feb 15
    • Andre
      16 Feb 15
  2. Heri Lesmana
    28 Feb 16
  3. alif
    30 Mar 16
    • Andre
      30 Mar 16
      • Alfian W
        26 Apr 16
        • Andre
          27 Apr 16
  4. neo
    05 May 16
    • Andre
      06 May 16
  5. Sonatha MT Tambunan
    12 Jul 16
    • Andre
      13 Jul 16
      • Sonatha MT Tambunan
        13 Jul 16
      • taufiq
        08 Oct 16
        • Andre
          08 Oct 16

Add Comment