Selasa, April 03, 2007

MySQL Improved alias MySQLI!

Sejak PHP 5 dirilis, muncul extension baru sebagai API ke RDBMS MySQL. Extension baru ini dinamakan MySQLI atau MySQL Improved. MySQLI memperkenalkan cara baru dalam berinteraksi dengan database server MySQL melalui PHP (dan konon lebih cepat dan lebih secure, walaupun gw sendiri belum pernah melakukan benchmark).

Yang paling keren menurut gw adalah model OOP baru dari MySQLI ini. Jadi di MySQLI kita bisa menggunakan 2 style coding, OOP ataupun prosedural. Model OOP-nya asyyiik banget dan lengkap.

Untuk nginstall extension MySQLI di Linux cukup gampang, cari aja paket-paket binary yang udah disediain ma distro masing-masing atau kalo kita biasa compile sendiri maka kita harus nambahin flag :

--with-mysqli=shared,/usr/local/mysql/bin/mysql-config

pada command configure kita
Kalo di Windows lebih gampang lagi, cukup tambahin baris :

extension=php_mysqli.dll

pada deretan module-module extension yang laennya di file php.ini. Trus restart deh Web Server-nya.

Langsung aja kita liat contoh implementasi extension MySQLI di source code PHP kita, begini nih caranye :

<?php
 
// buat constant 
define('DB_HOST', 'localhost');
define('DB_USER', 'dicarve');
define('DB_PASS', 'dicarvepass');
define('DB_NAME', 'dicarvedb');
define('DB_PORT', '3306');
 
// cek dulu apa extensionnya dah aktif pa belom?
if (!extension_loaded('mysqli')) {

    echo 'Extension MySQLI belum terinstall dengan benar. check php.ini';
    exit();
}
 
// buat objek mysqli
$mysqli_obj = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);

 
/* cek apakah koneksi berhasil dilakukan */
if (mysqli_connect_errno()) {
    echo 'Koneksi gagal dilakukan dengan alasan : '.mysqli_connect_error();
    exit();
} else {

    echo 'Koneksi berhasil dilakukan<br />'."\n";
    echo 'Versi Server MySQL : '.$mysqli_obj->server_info."<br />\n";

}
 
 
/* tutup koneksi ke db server */
$mysqli_obj->close();
?>


Ya ampuunn, ternyata gampang bener yah!! Weiittsss nanti dulu, itu baru koneksi-nya aja gimana untuk ngirim query ke database server-nya? ini sedikit contoh query SELECT yang menghasilkan resultset (atau recordset, whatever lahh) :

<?php
 
// include file source code koneksi database sebelumnya
// yang misalnya udah kita kasih nama 'mysqli.inc.php';
require 'mysqli.inc.php';
 
// untuk melakukan query kita menggunakan 
// metode 'query' milik kelas mysqli

// hasil dari pemanggilan metode ini nantinya akan
// menghasilkan sebuah objek baru milik kelas mysqli_result
$result_obj = $mysqli->query("SELECT nama FROM tabel_dicarve");
 
// cek apakah query berhasil dilakukan
if ($result_obj) {

    // gunakan properti publik 'num_rows' milik kelas mysqli_result
    // untuk mengetahui jumlah baris hasil query
    echo 'Ditemukan '.$result_obj->num_rows.' baris data<br /><br />';

 
    echo 'Data-data yang ditemukan adalah sbb : <br />';
 
    // gunakan metode 'fetch_row' untuk mengambil data baris demi baris dari resultset
    while ($data = $result_obj->fetch_row()) {

        echo $data[0].'<br />'."\n";
    }
 
    // bebaskan memory resultset

    $result_obj->close();
}
 
$mysqli_obj->close();
?>


Lohh?? Cuman segitu doank toh MySQLI? Tau gitu mah gw mendingan pake extension MySQL biasa aja dechh (cappeee dehh!!). Ya Enggak Lah!!! ada beberapa fitur baru yang menarik di MySQLI selaen koneksi dan query sederhana, misalnya meng-execute query SQL secara multiple dengan langsung dalam satu statement (bukan dengan pemanggilan metode 'query' berulang-ulang). Coba liat contoh berikut ini deh :

<?php
 
// include file source code koneksi database sebelumnya
// yang misalnya udah kita kasih nama 'mysqli.inc.php';
require 'mysqli.inc.php';
 
// setiap query SQL kita pisahkan dengan semi-colon atawa titik koma
$queries  = "SELECT gmd FROM tabel_gmd;";

$queries .= "SELECT nama FROM tabel_dicarve;";
$queries .= "SELECT judul FROM tabel_biblio";
 
// gunakan metode 'multi_query'
// untuk meng-execute string query SQL multiple secara simultan
$multi_query_obj = $mysqli_obj->multi_query($queries);

 
/* execute multi query */
if ($multi_query_obj) {
    // loop masing-masing result-nya
    while (true) {

        // ambil result set multiple query dengan metode 'store_result'
        if ($result = $mysqli_obj->store_result()) {
            while ($row = $result->fetch_row()) {

                echo $row[0]."<br />\n";
            }
 
            // bebasin memory resultset
            $result->close();
        }        

 
        // apakah masih ada resultset lagi?
        // kalau udah abis kita stop loop-nya
        if (!$mysqli_obj->more_results()) {
            break;
        } else {

            // kita buat pemisah antar resultset dengan garis horizontal HTML <hr>
            echo "<hr>\n";
        }
    }
}
 
/* tutup koneksi ke server */

$mysqli_obj->close();
?>


Nah itu dia sekilas penggunaan extension MySQLI di PHP, masih banyak fitur lain yang saya ga bisa jelasin satu persatu di sini (takutnya blog ini malah isinya MySQLI melulu). Buat programmer PHP yang demen pake model OOP, MySQLI cocok banget untuk digunain sebagai bagian dari kode-kode mereka. SELAMAT MENCOBA!!

4 komentar:

gunawan mengatakan...

Salam kenal
Maaf mas, saya gunawan, maaf, dari keterangan di blog mas disebutkan klo mas seorang librarian. Kebetulan saya sedang membuat sebuah sistem berbasis web untuk mengatur jurnal, tapi saya sendiri tidak tahu keterangan/field apa saja yang saya butuhkan, mungkin mas bisa memberitahu saya keterangan atau field apa saja yang harus ada, baik yg bersifat wajib maupun optional. sebelumnya terima kasih dan mohon maaf apabila saya tidak bertanya pada tempatnya

arienugraha mengatakan...

Salam Kenal juga untuk mas gunawan,

Kalau untuk sistem pengaturan jurnal field-field yang dibutuhkan adalah :
1. Judul Jurnal
2. Edisi Jurnal
3. Penerbit Jurnal
4. Tanggal Jurnal
5. Daftar Isi Jurnal

Untuk field-field yang opsional sifatnya saya sarankan adalah :

1. Tag Headline Jurnal
2. Cover Jurnal

Dan kalau mau mas gunawan membuat juga indeks dari artikel2 penting yang terkandung di dalam jurnal tersebut

kb.pstp fisip unair mengatakan...

Halo mas,

Numpang nge-link blog dan numpang citate quate mas Arie

scriptproject on blogger mengatakan...

salam kenal ...saya d2n (PUSTAKAWAN LIPI), saya sangat kagum sama karya bang arie salah satunya SENAYAN, apalagi bang arie backgroundnya PERPUSTAKAAN tapi jago PROGRAMMING, saya sendiri sampai sekakarang menggunakan dan mengembangkan SENAYAN..ada sedikit yang ingin saya tanyakan :ada error di paging TIPE KOLEKSI, atau lebih tepatnya ketika kita menambah TIPE KOLEKSI di MASTER FILE lebih dari 20, maka akan muncul sepert iini :

Fatal error: Class 'simbio_paging_ajax' not found in D:\xampp\htdocs\stikma_lib\simbio2\simbio_DB\datagrid\simbio_dbgrid.inc.php on line 333 ..

apakah bang arie bisa memperbaikinya?
jawabannya saya tunggu secepatnya..kirim lewat email juga bisa : diaz_fadeproof@yahoo.co.id