Tutorial PHP MySQL Part 17: Cara Menampilkan Data dengan mysqli Prepared Statements

Dalam tutorial belajar PHP MySQL kali ini kita akan membahas tentang penggunaan prepared statements, yakni cara menampilkan data MySQL menggunakan mysqli prepared statements.

Seperti biasa, karena mysqli memiliki 2 jenis gaya pemrograman (procedural style dan object style), saya akan membahas keduanya secara terpisah.

Cara Menampilkan Data MySQL Menggunakan Prepared Statements mysqli

Setelah membahas teori tentang pengertian prepared statements pada tutorial sebelumnya, kita akan langsung praktek mengenai cara penggunaan prepared statements untuk menampilkan sebuah data dari database MySQL.

Kali ini saya akan mencoba menampilkan tabel mahasiswa_ilkom dengan prepared statements. Tabel ini kita buat pada tutorial PHP MySQL: Cara Menampilkan Tabel MySQL dari PHP (mysql_fetch_row).

Seperti yang telah dibahas, untuk membuat prepared statements, kita membutuhkan 3 langkah: prepared, bind, dan excecute.

Langkah pertama: prepared

Sebagai contoh, saya ingin menampilkan seluruh kolom dari tabel mahasiswa_ilkom dimana nama mahasiswanya adalah "Neil Situmorang". Sesuai dengan fungsinya, di dalam proses prepared ini kita hanya butuh mempersiapkan query MySQL, tanpa ada data.

Untuk proses prepared, mysqli PHP menyediakan fungsi mysqli_prepare(). Fungsi ini membutuhkan 2 argumen, yakni variabel hasil pemanggilan fungsi mysqli_connect(), dan prepared query yang akan dijalankan. Berikut adalah contoh penulisannya:

<?php
// buat koneksi dengan MySQL, gunakan database: universitas
$link = mysqli_connect('localhost', 'root', '', 'universitas');
 
// buat prepared statements
$stmt = mysqli_prepare($link, "SELECT * FROM mahasiswa_ilkom WHERE nama=?");
?>

Hasil pemanggilan fungsi mysqli_prepare() selanjutnya disimpan kedalam variabel $stmt. Variabel ini akan kita gunakan di dalam proses bind, execute dan dalam proses menampilkan data. Anda bebas jika ingin menukar variabel ini dengan nama lain.

Secara internal, ketika kita menggunakan fungsi mysqli_prepare(), query tersebut langsung di kirim ke MySQL Server. Selanjutnya di dalam MySQL, query akan disimpan sementara menunggu proses bind.

Langkah kedua: bind

Pada proses bind, kita akan mengirimkan data kepada MySQL. Data yang akan dikirim adalah untuk menggantikan tanda "?" yang sebelumnya dibuat pada proses prepared. Di dalam mysqli PHP, proses bind dilakukan menggunakan fungsi mysqli_stmt_bind_param(). Fungsi ini membutuhkan setidaknya 3 buah argumen, berikut contohnya:

<?php
// siapkan "data" query
$nama_mhs="Neil Situmorang";
 
// hubungkan "data" dengan prepared statements
mysqli_stmt_bind_param($stmt, "s", $nama_mhs);
?>

Argumen pertama dari fungsi mysqli_stmt_bind_param() adalah variabel hasil pemanggilan fungsi mysqli_prepare(), dalam contoh kita adalah varabel $stmt.

Argumen kedua adalah string yang menunjukkan jenis tipe data argumen ketiga, yakni data yang akan diinput kedalam query (kita akan membahas isi argumen kedua ini sesaat lagi).

Argumen ketiga adalah data yang akan menggantikan tanda "?" dari query, dalam contoh kita adalah "Neil Situmorang". Tetapi karena fungsi mysqli_stmt_bind_param() membutuhkan data dalam bentuk variabel, saya harus menyimpannya terlebih dahulu ke dalam variabel $nama_mhs.

Argumen kedua dari fungsi mysqli_stmt_bind_param() membutuhkan pembahasan tersendiri. Argumen ini berisi data string yang menunjukkan jenis tipe data argumen ketiga. PHP menyediakan 4 jenis tipe data:

  • i = variabel bertipe integer
  • d = variabel bertipe double
  • s = variabel bertipe string
  • b = variabel bertipe blob (binary)

Karena di dalam contoh saya mengunakan variabel $nama_mhs yang bertipe string, maka di dalam argumen kedua ditulis: "s". Tetapi apabila saya mengganti variabel ketiga menjadi umur yang bertipe integer, maka argumen kedua ini menjadi "i".

Langkah ketiga: execute

Setelah proses bind selesai, langkah berikutnya adalah menjalankan query dengan menggunakan fungsi mysqli_stmt_execute(). Fungsi ini membutuhkan 1 buah argumen, yakni variabel hasil pemanggilan fungsi mysqli_prepare():

<?php
   mysqli_stmt_execute($stmt);
?>

Fungsi mysqli_stmt_execute() menginstruksikan kepada MySQL untuk segera menjalankan perintah prepared statement yang telah dibuat. Sampai disini proses menjalankan perintah query telah terkirim ke MySQL. Selanjutnya, kita akan menampilkan data hasil query.

Menampilkan data hasil query

Untuk menampilkan hasil query, kita mengambil data MySQL dengan fungsi mysqli_stmt_get_result(). Fungsi ini membutuhkan 1 argumen berupa variabel hasil fungsi mysqli_prepare(). Fungsi ini juga mengembalikan nilai bertipe resources yang selanjutnya bisa digunakan untuk menampilkan data.

<?php
// ambil hasil query
$result=mysqli_stmt_get_result($stmt);
?>

Selanjutnya, untuk menampilkan data kita bisa menggunakan cara biasa menggunakan mysql_fetch_row() atau mysql_fetch_array():

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

Langkah terakhir yang bersifat opsional (pilihan) adalah menutup proses prepared statement dengan fungsi mysqli_stmt_close(). Tetapi sama dengan fungsi mysqli_close(), jika kita tidak menulisnya, PHP secara otomatis akan menutup koneksi ke MySQL saat halaman selesai di proses.

Dengan menggabungkan seluruh fungsi-fungsi prepared statements yang telah kita bahas, berikut adalah contoh kode programnya secara lengkap:

<?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=?");
 
// cek query
if (!$stmt) {
 die('Query Error : '.mysqli_errno($link).
 ' - '.mysqli_error($link));
}

// siapkan "data" query
$nama_mhs="Neil Situmorang";
 
// hubungkan "data" dengan prepared statements
mysqli_stmt_bind_param($stmt, "s", $nama_mhs);
 
// jalankan query
mysqli_stmt_execute($stmt);
 
// 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

Selain fungsi-fungsi yang kita bahas pada tutorial kali ini, saya juga menambahkan fungsi untuk memeriksa kesalahan seperti yang pernah kita bahas pada tutorial cara menampilkan pesan kesalahan (error) mysqli, yakni fungsi mysqli_errno dan mysqli_error().


Prepared Statement mysqli Object Style

Sebagai alternatif, berikut adalah cara penulisan prepared statement menggunakan object style mysqli. Method yang digunakan relatif hampir sama dengan procedural style yang kita bahas diatas.

<?php
// buat koneksi dengan MySQL, gunakan database: universitas
$mysqli = new mysqli("localhost", "root", "","universitas");

// cek koneksi
if ($mysqli->connect_errno) {
 die('Koneksi gagal: ' .$mysqli->connect_errno.
 ' - '.$mysqli->connect_error);
}

// buat prepared statements
$stmt = $mysqli->prepare("SELECT * FROM mahasiswa_ilkom WHERE nama=?");

// cek query
if (!$stmt) {
 die('Query Error : '.$mysqli->errno.
 ' - '.$mysqli->error);
}

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

// hubungkan "data" dengan prepared statements
$stmt->bind_param("s", $nama_mhs);

// jalankan query
$stmt->execute();

// hubungkan hasil query
$result = $stmt->get_result();

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

// tutup statements
$stmt->close();

// tutup koneksi
$mysqli->close();
?>

Dalam tutorial PHP MySQL kali ini kita telah membahas tentang cara penggunaan prepared statements MySQL untuk menampilkan data. Pada tutorial berikutnya kita akan bahas cara menggunakan mysqli prepared statement untuk proses input data kedalam database MySQL.

15 Comments

  1. Anonymous
    21 Dec 14
    • Andre
      22 Dec 14
  2. holong
    02 Feb 15
    • holong
      02 Feb 15
  3. juana
    28 Mar 15
    • Andre
      29 Mar 15
  4. johannes
    10 Apr 15
    • Andre
      12 Apr 15
  5. Anonymous
    20 Jul 17
    • Andre
      21 Jul 17
  6. Ferri
    20 Jul 17
    • Andre
      21 Jul 17
      • Ferri
        28 Jul 17
  7. Anonym
    14 Aug 17
    • Andre
      16 Aug 17

Add Comment