Jika dalam tutorial PHP MySQL sebelumnya kita membahas tentang cara menampilkan data dengan mysqli prepared statements, dalam tutorial kali ini kita akan mempelajari cara menginput data menggunakan mysqli prepared statements.
Cara Menginput Data dengan mysqli Prepared Statements
Perbedaan antara cara menginput data dan menampilkan data menggunakan prepared statements terletak pada cara penanganan query. Apabila dalam menampilkan data kita menggunakan perintah SELECT, maka untuk menginput data kita menggunakan query INSERT.
Fitur keamanan yang diberikan oleh prepared statements membuatnya cocok digunakan untuk perintah yang akan mengubah isi tabel seperti perintah INSERT atau UPDATE. Selain itu, penggunaan prepared statement untuk proses input data yang berulang juga akan mempercepat proses eksekusi.
Dalam contoh kasus kita kali ini, saya akan menambahkan 1 buah data tambahan kedalam tabel mahasiswa_ilkom. Saya juga tidak akan membahas secara mendalam fungsi-fungsi prepared statement yang digunakan, karena kita telah membahasnya pada tutorial sebelumnya.
Proses pertama: prepared
Untuk menginput data kedalam tabel mahasiswa_ilkom, kita akan menggunakan query INSERT…VALUES (Jika anda ingin mempelajari cara-cara menginput data kedalam MySQL, silahkan kunjungi tutorial MySQL: Cara menambahkan data kedalam tabel).
Berikut adalah fungsi mysqli_prepare() untuk proses penambahan data:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = mysqli_connect('localhost', 'root', '', 'universitas'); Â // buat prepared statements $stmt = mysqli_prepare($link, "INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)"); ?>
Perhatikan cara penulisan query INSERT diatas. Karena fungsi prepared statements yang memisahkan query dengan data, maka di kolom VALUES, kita tidak langsung menuliskan data yang akan ditambahkan, tetapi menggunakan tanda "?" sebanyak 5 kali untuk penanda data yang akan diinput. Kelima data ini selanjutnya akan ditambahkan pada saat proses bind.
Proses kedua: bind
Proses pengiriman data (bind) dilakukan dengan fungsi mysqli_stmt_bind_param(). Karena query INSERT kita membutuhkan 5 variabel, maka fungsi mysqli_stmt_bind_param() juga harus menyertakan kelima variabel ini (untuk mengganti karakter (?, ?, ?, ?, ?)).
Sebelumnya, kita harus menuliskan masing-masing isian ke dalam variabel terpisah, lalu kemudian baru diinput kedalam fungsi mysqli_stmt_bind_param(). Berikut adalah contoh kode program dimana saya akan men-bind data ke dalam prepared statement:
<?php // hubungkan "data" dengan prepared statements mysqli_stmt_bind_param($stmt, "ssisd", $nim_mhs, $nama_mhs, $umur_mhs , $tempat_lahir_mhs, $ipk_mhs); Â // siapkan "data" query $nim_mhs="089023020"; $nama_mhs="Naira Alika"; $umur_mhs=20; $tempat_lahir_mhs="Padang"; $ipk_mhs=3.9; ?>
Dalam contoh diatas, fungsi mysqli_stmt_bind_param() memiliki 7 argumen. Argumen pertama adalah variabel $stmt hasil fungsi mysqli_prepare(), argumen kedua adalah string yang menunjukkan 5 tipe data. Argumen ke-3 sampai ke-7 adalah variabel yang akan berisi data yang ingin diinput.
Untuk argumen kedua saya menulis "ssisd", yang merupakan singkatan dari "string string string integer string decimal". String ini akan berpasangan dengan variabel inputan ke-3 sampai ke-7:
- $nim_mhs = "089023020" (string).
- $nama_mhs =Â "Naira Alika" (string).
- $umur_mhs = 20 (integer).
- $tempat_lahir_mhs = Padang (string).
- $ipk_mhs = 3.9 (decimal / float).
Setelah penulisan fungsi mysqli_stmt_bind_param(), saya kemudian membuat data sample mahasiswa dengan nama "Naira Alika". Perhatikan bahwa isi data ini diinput ke dalam variabel yang sama dengan yang digunakan pada fungsi mysqli_stmt_bind_param() untuk argumen ke-3 s/d ke-7.
Data-data inilah yang nantinya di-bind dengan query asal, sehingga query kita akan menjadi:
INSERT INTO mahasiswa_ilkom VALUES ("089023020", "Naira Alika", 20, "Padang", 3.9)
Proses ketiga: execute
Setelah query dan data selesai diinput, kita tinggal menjalankan query dengan fungsi mysqli_stmt_execute():
<?php // jalankan query: execute mysqli_stmt_execute($stmt); ?>
Memeriksa Hasil Query
Untuk memeriksa apakah hasil query INSERT yang dijalankan berhasil atau tidak, bisa dilakukan dengan memeriksa variabel $stmt dan fungsi mysqli_stmt_affected_rows(), seperti contoh berikut:
<?php // cek hasil query if (!$stmt) { die('Query Error : '.mysqli_errno($link).' - '.mysqli_error($link)); } else { echo "Penambahan ".mysqli_stmt_affected_rows($stmt)." data berhasil<br />"; } ?>
Kondisi if (!$stmt) akan menjadi TRUE ketika query gagal, sehingga fungsi die() akan menghentikan proses dan menampilkan error yang terjadi. Tetapi jika query sukses, bagian else yang akan dijalankan.
Fungsi mysqli_stmt_affected_rows() mirip dengan fungsi mysql_ affected_rows() yang pernah kita bahas, dan akan menampilkan berapa jumlah baris yang diupdate. Karena pada contoh kali ini kita hanya menambahkan 1 buah data, maka hasilnya adalah: 1.
Agar lebih yakin, saya kemudian akan menampilkan seluruh tabel mahasiswa_ilkom dengan kode berikut:
<?php // jalankan query untuk memeriksa hasil inputan $result = mysqli_query($link, "SELECT * FROM mahasiswa_ilkom"); Â // tampilkan query while ($row=mysqli_fetch_row($result)) { echo "$row[0] $row[1] $row[2] $row[3] $row[4]"; echo "<br />"; } ?>
Kode diatas sudah sering kita gunakan, sehingga saya tidak akan membahasnya lagi.
Terakhir adalah fungsi opsional untuk memutus koneksi dengan MySQL Server:
<?php // tutup statements mysqli_stmt_close($stmt); Â // tutup koneksi mysqli_close($link); ?>
Dengan menggabungkan seluruh pembahasan kita diatas, berikut adalah contoh kode program PHP lengkap mengenai cara menginput data MySQL menggunakan mysqli prepared statement:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = mysqli_connect('localhost', 'root', '', 'universitas'); Â // buat prepared statements $stmt = mysqli_prepare($link, "INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)"); Â // hubungkan "data" dengan prepared statements mysqli_stmt_bind_param($stmt, "ssisd", $nim_mhs, $nama_mhs, $umur_mhs , $tempat_lahir_mhs, $ipk_mhs); Â // siapkan "data" query $nim_mhs="089023020"; $nama_mhs="Naira Alika"; $umur_mhs=20; $tempat_lahir_mhs="Padang"; $ipk_mhs=3.9; Â // jalankan query mysqli_stmt_execute($stmt); Â // cek hasil query if (!$stmt) { die('Query Error : '.mysqli_errno($link).' - '.mysqli_error($link)); } else { echo "Penambahan ".mysqli_stmt_affected_rows($stmt). " data berhasil<br />"; } Â // jalankan query untuk memeriksa hasil inputan $result = mysqli_query($link, "SELECT * FROM mahasiswa_ilkom"); Â // tampilkan 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); ?>
Apabila dijalankan, maka hasil yang didapat adalah sebagai berikut:
Penambahan 1 data berhasil 089023013 Alex Supriyanto 23 Surabaya 2.90 089023020 Naira Alika 20 Padang 3.90 089045001 Andi Suryo 23 Jakarta 2.70 099145055 Neil Situmorang 22 Medan 1.90 109223041 Rani Sabrina 21 Padang 3.70 109245021 Santi Syanum 21 Malang 3.20
Bisa terlihat bahwa data mahasiswa baru: "Naira Alika" telah masuk kedalam tabel mahasiswa_ilkom.
Cara Menginput Multiple Data dengan mysqli Prepared Statements
Masih berkaitan dengan pembahasan kita, saya akan memodifikasi sedikit kode program untuk menampilkan cara menginput banyak data (multiple data) menggunakan mysqli prepared statement:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = mysqli_connect('localhost', 'root', '', 'universitas'); Â // buat prepared statements $stmt = mysqli_prepare($link, "INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)"); Â // hubungkan "data" dengan prepared statements mysqli_stmt_bind_param($stmt, "ssisd", $nim_mhs, $nama_mhs, $umur_mhs , $tempat_lahir_mhs, $ipk_mhs); Â // siapkan "data" query 1 $nim_mhs="089023023"; $nama_mhs="Alika Shanum"; $umur_mhs=21; $tempat_lahir_mhs="Medan"; $ipk_mhs=3.8; Â // jalankan query 1 mysqli_stmt_execute($stmt); Â // cek hasil query 1 if (!$stmt) { die('Query Error : '.mysqli_errno($link).' - '.mysqli_error($link)); } else { echo "Penambahan ".mysqli_stmt_affected_rows($stmt)." data berhasil<br />"; } Â // siapkan "data" query 2 $nim_mhs="089023026"; $nama_mhs="Rina Melita"; $umur_mhs=22; $tempat_lahir_mhs="Lampung"; $ipk_mhs=3.5; Â // jalankan query 2 mysqli_stmt_execute($stmt); Â // cek hasil query 2 if (!$stmt) { die('Query Error : ' .mysqli_errno($link).' - '.mysqli_error($link)); } else { echo "Penambahan ".mysqli_stmt_affected_rows($stmt)." data berhasil<br />"; } Â // siapkan "data" query 3 $nim_mhs="089023031"; $nama_mhs="Joni Halim"; $umur_mhs=21; $tempat_lahir_mhs="Palembang"; $ipk_mhs=3.6; Â // jalankan query 3 mysqli_stmt_execute($stmt); Â // cek hasil query 3 if (!$stmt) { die('Query Error : '.mysqli_errno($link).' - '.mysqli_error($link)); } else { echo "Penambahan ".mysqli_stmt_affected_rows($stmt)." data berhasil<br />"; } Â // jalankan query untuk memeriksa hasil inputan $result = mysqli_query($link, "SELECT * FROM mahasiswa_ilkom"); Â // tampilkan 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); ?>
Kode diatas sedikit panjang, tetapi jika anda sudah memahami konsep prepared statement, fungsi-fungsi yang ada bisa dipahami dengan mudah.
Perhatikan bahwa ketika kita menginput banyak data, kita tidak perlu lagi mengirimkan query ke MySQL Server, tetapi cukup dengan mengubah variabel data dan menjalankan fungsi mysqli_stmt_execute(). Untuk situasi inilah prepared statement menjadi lebih efisien dari pada metoda mysqli 'biasa'.
Jika anda menjalankan kode program diatas, berikut adalah hasil yang didapat:
Penambahan 1 data berhasil Penambahan 1 data berhasil Penambahan 1 data berhasil 089023013 Alex Supriyanto 23 Surabaya 2.90 089023020 Naira Alika 20 Padang 3.90 089023023 Alika Shanum 21 Medan 3.80 089023026 Rina Melita 22 Lampung 3.50 089023031 Joni Halim 21 Palembang 3.60 089045001 Andi Suryo 23 Jakarta 2.70 099145055 Neil Situmorang 22 Medan 1.90 109223041 Rani Sabrina 21 Padang 3.70 109245021 Santi Syanum 21 Malang 3.20
Cara Menginput Data dengan mysqli Prepared Statements (object style)
Dalam pembahasan diatas, saya menggunakan procedural style mysqli, kali ini kita akan melihat modifikasi kode programnya jika menggunakan object style mysqli:
<?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("INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)"); Â // hubungkan "data" dengan prepared statements $stmt->bind_param("ssisd", $nim_mhs, $nama_mhs, $umur_mhs , $tempat_lahir_mhs, $ipk_mhs); // siapkan "data" query $nim_mhs="089023020"; $nama_mhs="Naira Alika"; $umur_mhs=20; $tempat_lahir_mhs="Padang"; $ipk_mhs=3.9; // jalankan query $stmt->execute(); // cek query if (!$stmt) { die('Query Error : '.$mysqli->errno. ' - '.$mysqli->error); } else { echo "Penambahan ".$stmt->affected_rows. " data berhasil<br />"; } // jalankan query untuk memeriksa hasil inputan $result = $mysqli->query("SELECT * FROM mahasiswa_ilkom"); // 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 belajar PHP MySQL kali ini kita telah mempelajari cara menggunakan mysqli prepared statement untuk menginput data kedalam database. Tutorial kali ini menutup sesi pembahasan tentang mysqli. Dalam tutorial berikutnya kita akan berkenalan dengan extension ketiga PHP-MySQL, yakni PDO: PHP Data Object.
kalau tipe datanua date gmn ya gan bind_paramnya (s) atau apa? mohon pencerahannya?
Untuk date dihitung sebagai string gan, jadi pakai (s).
contoh kalo !$stmt error gimana gan?
kalo dijalanin diatas data duplicate seharusnya, tapi yang tampil:
"penambahan -1 data berhasil"
Misalnya kalau querynya salah tulis, seperti "SELECT * FRO mahasiswa_ilkom" (kurang huruf "M" untuk kata FROM).
mas andre berarti maksimal penambahan datanya secara tidak langsung sudah di tetapkan yah dengan argumen " ?,?,?,?,? " jadi kita hanya bisa maksimal Insert 5 data? jadi kalau mw 10 keatas kita harus isi argumen "?" 10x
atau ada penulisan lain mohon pencerahan mas
sama saya kurang paham sama penjelasan mas andre di bagia
" Perhatikan bahwa ketika kita menginput banyak data, kita tidak perlu lagi mengirimkan query ke MySQL Server, tetapi cukup dengan mengubah variabel data dan menjalankan fungsi mysqli_stmt_execute(). Untuk situasi inilah prepared statement menjadi lebih efisien dari pada metoda mysqli 'biasa'. "
contoh pengembalian query ke mysql servernya dmna ya mas , atau mohon di beri contoh penulisan untuk query ke mysql server pada mysqli biasa
terima kasih mas
Bukan, argumen " ?,?,?,?,? " hanya membatasi data penyusun query. Berapa kali diinput tidak masalah, tinggal mengulang baris "mysqli_stmt_execute($stmt); " sesuai kebutuhan.
kalau Cara Menginput Multiple tabel dengan mysqli Prepared Statements gimana ya mas ?
Paling simple di jalankan satu2 saja sih… Jadi setelah input ke 1 tabel selesai, langsung lanjut ke tabel lain dalam 1 file PHP.