Mengenal Fungsi PHP untuk Pengambilan Data MySQL: mysql_fetch_*

PHP dan MySQL, seolah pasangan sejati yang tak terpisahkan. Keduanya paling sering disandingkan dalam pembuatan aplikasi berbasis web (web application development). Tak heran jika begitu banyak fungsi terkait dengan MySQL yang disediakan oleh PHP. Setidaknya terdapat 45 fungsi PHP terkait dengan MySQL mulai dari koneksi, pengambilan data, query data hingga informasi server MySQL.

Dalam tutorial ini akan dikenalkan berbagai fungsi PHP terkait dengan pengambilan data MySQL. Pengambilan data yang dimaksud disini tepatnya adalah pengolahan hasil perintah query SELECT yang dihasilkan dari fungsi mysql_query(). Hasil perintah query dapat diolah untuk ditampilkan atau diproses oleh PHP melalui berbagai fungsi yang diawali dengan mysql_fetch_*. Terkait hal tersebut, PHP memiliki 6 (enam) fungsi yaitu: mysql_fetch_array(), mysql_fetch_assoc(), mysql_fetch_field(), mysql_fetch_lengths(), mysql_fetch_object() dan mysql_fetch_row().

Dalam tutorial ini akan dijelaskan kegunaan dari 4 (empat) fungsi yaitu mysql_fetch_array(), mysql_fetch_assoc(), mysql_fetch_object() dan mysql_fetch_row(). Sementara dua fungsi lainnya yaitu mysql_fetch_field() dan mysql_fetch_lengths() tidak dijelaskan di tutorial ini karena keduanya tidak terlalu berkaitan dengan pengambilan data MySQL, selain itu keduanya akan dihilangkan setelah PHP versi 5.5.0.

Untuk keperluan contoh program dalam tutorial ini, kita akan menggunakan struktur tabel “mahasiswa” sebagai berikut:

FIELD TYPE LENGTH DESCRIPTION
nim VARCHAR 10 NIM Mahasiswa
nama VARCHAR 30 NAMA Mahasiswa
alamat TEXT Alamat Mahasiswa

Dan berikut ini isi dari tabel mahasiswa tersebut:

mysql> select * from mahasiswa; 
+------------+-----------------------+---------------------------------------------------------+ 
| nim | nama | alamat | 
+------------+-----------------------+---------------------------------------------------------+ 
| 0111500382 | Achmad Solichinn | Jl. Raya Ciledug, Jakarta Selatan | 
| 0411500300 | Chotimatul Musyarofah | Peninggilan, Kec. Ciledug, Tangerang, Banten, Indonesia | 
| 0911500292 | Muhammad Lintang | Jakarta Selatan, DKI Jakarta | 
| 1011500101 | Budi Susanto | Jl. Ciledug Raya, Petukangan Utara | 
+------------+-----------------------+---------------------------------------------------------+

mysql_fetch_array() : Array asosiatif dan Array numerik

 

Fungsi mysql_fetch_array() merupakan salah satu fungsi yang banyak digunakan dalam proses pengambilan data MySQL. Fungsi ini akan menangkap data dari hasil perintah query dan membentuknya ke dalam array asosiatif dan array numerik. Jadi, fungsi mysql_fetch_array() menawarkan kemudahan dan fleksibilitas dalam mengakses data. Namun demikian, penggunaan fungsi ini dianggap kurang efektif dari sisi performa karena terlalu “boros” penyimpanan.
Untuk memberikan gambaran bagaimana penggunaan fungsi mysql_fetch_array(), perhatikan contoh berikut ini:

  1. <?php
  2. mysql_connect("localhost", "root", "qwerty");
  3.  
  4. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  5. echo "<h3>mysql_fetch_array cara array asosiatif</h3>";
  6. while ($baris = mysql_fetch_array($sql)) {
  7. echo $baris['nim']. " ". $baris['nama']. "<br/>";
  8. }
  9.  
  10. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  11. echo "<h3>mysql_fetch_array cara array numerik</h3>";
  12. while ($baris = mysql_fetch_array($sql)) {
  13. echo $baris[0]. " ". $baris[1]. "<br/>";
  14. }
  15.  
  16. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  17. echo "<h3>Struktur array (mysql_fetch_array)</h3>";
  18. while ($baris = mysql_fetch_array($sql)) {
  19. echo "<pre>";
  20. print_r($baris);
  21. echo "</pre>";
  22. }
  23.  
  24. ?>

 

Seperti sudah dinyatakan sebelumnya bahwa fungsi mysql_fetch_array() akan menghasilkan struktur data dalam bentuk array asosiatif maupun array numerik. Pada contoh diatas, dengan menggunakan fungsi mysql_fetch_array(), dapat ditampilkan nilai dari masing-masing baris hasil perintah query SELECT. Cara menampilkan data dapat menggunakan “gaya” array asosiatif seperti terlihat pada baris ke-8 dimana nama field akan menjadi index array, dan juga dapat menggunakan “gaya” array numerik seperti terlihat pada baris ke-14 dimana indexnya berupa nilai numerik sesuai urutan field hasil perintah query SELECT. Urutan numerik tersebut diawali dari 0.

Struktur array yang dihasilkan oleh fungsi mysql_fetch_array() dapat diketahui dengan menggunakan fungsi print_r() seperti perintah pada baris ke-21. Hasilnya akan terlihat seperti pada gambar berikut ini:

fetch-array-print-r

mysql_fetch_assoc() : Array asosiatif saja

 

Dalam hal pengambilan data MySQL, saat ini saya lebih sering menggunakan fungsi mysql_fetch_assoc() dibanding fungsi lainnya. Fungsi ini menghasilkan array asosiatif yang mana index-nya sesuai dengan nama kolom yang diseleksi. Mudahnya, tidak tergantung pada urutan kolom, yang penting index-nya sesuai. Dari sisi programmer juga menjadi lebih informatif. Untuk memberikan gambaran bagaimana penggunaan fungsi mysql_fetch_assoc(), perhatikan contoh berikut ini:

  1. <?php
  2. mysql_connect("localhost", "root", "qwerty");
  3.  
  4. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  5. echo "<h3>mysql_fetch_assoc cara array asosiatif</h3>";
  6. while ($baris = mysql_fetch_assoc($sql)) {
  7. echo $baris['nim']. " ". $baris['nama']. "<br/>";
  8. }
  9.  
  10. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  11. echo "<h3>Struktur array (mysql_fetch_assoc)</h3>";
  12. while ($baris = mysql_fetch_assoc($sql)) {
  13. echo "<pre>";
  14. print_r($baris);
  15. echo "</pre>";
  16. }
  17. ?>

 

Tidak seperti mysql_fetch_array(), fungsi mysql_fetch_assoc() hanya menghasilkan array asosiatif dimana index-nya merepresentasikan nama kolom yang diseleksi. Pada program di atas terlihat bahwa pada baris ke-8, untuk setiap baris hasil perintah query akan ditampilkan nilainya. Sementara itu, jika dilihat dari strukturnya, mysql_fetch_assoc() hanya menghasilkan array asosiatif seperti terlihat pada potongan tampilan program 2 di atas berikut ini.

fetch-assoc

 

mysql_fetch_row() : Array numerik saja

 

Untuk kasus-kasus tertentu, saya terkadang lebih memilih menggunakan fungsi mysql_fetch_row() dibanding yang lainnya. Contohnya pada saat saya ingin mengambil jumlah hasil perintah query dengan menggunakan fungsi COUNT() di MySQL. Program berikut ini akan menampilkan jumlah record dengan fungsi COUNT() dan diambil dengan fungsi mysql_fetch_row(). Pada bagian akhir program juga ditampilkan struktur array dengan perintah mysql_fetch_row().

  1. <?php
  2. mysql_connect("localhost", "root", "qwerty");
  3.  
  4. $sql = mysql_query ("SELECT COUNT(*) FROM mahasiswa");
  5. $baris = mysql_fetch_row($sql);
  6. echo "Jumlah data: ". $baris[0]. "<br/>";
  7.  
  8. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  9. echo "<h3>Struktur array (mysql_fetch_row)</h3>";
  10. while ($baris = mysql_fetch_row($sql)) {
  11. echo "<pre>";
  12. print_r($baris);
  13. echo "</pre>";
  14. }
  15. ?>

 

 

mysql_fetch_object() : Gaya object-oriented

 

Fungsi mysql_fetch_object() akan menyajikan hasil perintah query dalam gaya penulisan object oriented. Sama seperti mysql_fetch_assoc(), fungsi ini menjadikan nama kolom hasil perintah query menjadi property dari obyek. Contoh penggunaannya tampak pada program 4 di bawah ini. Penggunaan fungsi ini sebaiknya dihindari untuk keperluan mendatang karena fungsi ini akan deprecated pada versi PHP 5.5.0 dan akan dihilangkan pada versi selanjutnya.

  1. <?php
  2. mysql_connect("localhost", "root", "qwerty");
  3.  
  4. $sql = mysql_query ("SELECT nim, nama FROM mahasiswa");
  5. echo "<h3>mysql_fetch_object</h3>";
  6. while ($baris = mysql_fetch_object($sql)) {
  7. echo $baris->nim. " ". $baris->nama. "<br/>";
  8. }
  9. ?>

 

Perbandingan Kecepatan

Untuk menguji kecepatan dari keempat fungsi di atas, saya mencoba melakukan pengujian dengan menerapkan keempat fungsi untuk mengambil data yang berjumlah 1.135.392 record. Hasilnya sebagai berikut:

mysql_fetch_array() : 18.302305936813 detik
mysql_fetch_assoc() : 16.9645819664 detik
mysql_fetch_row() : 16.664786100388 detik
mysql_fetch_object() : 35.827367067337 detik
Perbandingan Kecepatan Fungsi
Perbandingan Kecepatan Fungsi

 

Jadi, mana yang sebaiknya digunakan dalam pengambilan data dari database MySQL? Dari pengujian sederhana di atas, yang jelas kita sebaiknya menghindari penggunaan fungsi mysql_fetch_object() karena disamping paling buruk dari sisi kecepatan, juga karena fungsi tersebut akan segera dihilangkan dari fungsi bawaan PHP. Selanjutnya, untuk ketiga fungsi lainnya masih layak untuk digunakan karena secara kecepatan hampir seimbang. Pilihannya tinggal menyesuaikan kebutuhan programmer.

Sebagai masukan, berkaitan dengan komunikasi antara PHP dengan database MySQL, kita sebaiknya mulai beralih dari penggunaan fungsi mysql_* menjadi fungsi mysqli_* atau gunakan abstraction layer database. Sebagai informasi awal, MySQLi (mysql improved) merupakan library mysql yang telah ditingkatkan kemampuan, kecepatan dan performanya. Semoga di tutorial mendatang, kita dapat membahas mengenai library MySQLi tersebut.

Semoga tutorial ini bermanfaat untuk kita semua dan berbagilah hal baik ke sebanyak-banyaknya orang maka kebahagiaan akan menghampiri Anda. Satu Karya untuk Indonesia!

Download Tutorial

Berbagi itu indah...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0Digg this

41 comments

      1. makasi banyak pak petunjuknya, sekarang sy sudah sedikit paham, ditunggu postingannya tentang mysql improved 🙂

  1. walaaah kabanyak project pke mysql_fetch_object,,, thanks info nya pak. buat project2 kedepannya saya bakal hindari mysql_fetch_object
    oiya, buat command mysqli itu jadi semua command yg ada mysql nya di ganti sama mysqli?

    1. nah ini juga yang mau saya tanya
      saat ini sedang kkp dan melakukan pembelajaran via browsing dimana (mulai) sering ditemukan perintah memakai mysqli_
      sedangkan kkp saya saat ini masih memakai mysql_
      apakah harus dirubah total atau tetap bisa dipakai?

      terima kasih

  2. Pak Dosen, Terima Kasih atas semua tutorial yang telah kami download dan saya pelajari dan terima kasih juga semua tutorial yang telah dikirmkan ke email kami.
    Alhamdulillah pada umumnya bisa kami pahami dan aplikasikan, tetapi sampai saat ini kami belum memiliki website pribadi, tetapi sudah berhasil membuat sebuah sistem informasi berbasis web, yaitu suatu situs lokal untuk tempat penyimpanan arsip di kontor kami, walaupun masih banyak kekurangannya.
    Pak Dosen, kalau boleh kami ingin tahu lebih banyak tentang pemrograman web, yaitu kami ingin belajar cara membuat sistem informasi Keuangan Daerah Seperti SIKD Depdagri. Di sini kami ingin mengetahui bagaimana cara membuat form table input multi rows dan cara membuat auto nama tabel, sehingga pada saat penambahan nama sebuah judul tertentu, maka nama tabel akan otomatis terbentuk dari penambahan judul terset. terima kasih atas perhatiannya.

  3. Mana yang lebih baik antara kita menggunakan MAX( ) atau DESC kalau kita mau menampilkan data terakhir dari ID tertentu (WHERE). Terimakasih atas jawabannya

    1. menurut beberapa referensi, yang lebih baik pake MAX() karena kalo pake LIMIT DESC mysql akan mengurutkan semua datanya baru di-limit. namun demikian, tergantung kasusnya juga.

  4. Saya telah banyak belajar dari postingan2 anda, saya mengucapkan banyak terimakasih sehingga saya dapat menambah kemampuan menulis script karena memang saya tidak bisa melanjutkan study ke bangku kuliah

  5. pak, minta bantuannya…ada kasus seperti ini : tb_absen
    nik | nama | tgl
    1 andi 2013-05-30
    3 anjas 2013-06-01
    2 anton 2013-07-03

    aku menampilkan hasil search dengan kata kunci 1 dan 3 menggunakan array gimana ya pak?? kenapa pake array?tujuannya biar kata kuncinya dinamis…gak terbatas hanya 1 atau 2 kata kunci saja…

    trimakasih atas bantuan sebelumnya…

  6. Assalamualaikum. ww
    Salem Kenal Mas Ahmad, saya mau nanya ni mas
    Bagaimana membuat data base yang isinya no urut, nama siswa, no NIM, dan nilai, kemudian setiap siswa dapat melihat nilainya saja (nilai teman yg lain tidal) do website

  7. terima kasih pak, sangat membantu, dan sangat jelas..
    mohon di tambah untuk PDO nya ya pak,, kayaknya lg booming di MySQL 5 ni..

Leave a Reply

Your email address will not be published. Required fields are marked *