Tag

, , , ,


Pukul 23:55 WIB @kamar kos yang sempit.

stored_procedures_2Mengingat waktu mencoba mendalami penggunaan procedure pada Data base MySQL setelah berhasil, rasanya ingin membagikan kepada semua orang..hehehe

ada beberapa alasan kenapa digunakan Stored Procedure (SP) pada database alih-alih menuliskannya pada codingan secara langsung. Pastinya semua metode memiliki 2 buah sisi, yaitu keuntungan dan kerugian. berikut sedikit ulasannya.

Keuntungan :

  1. SP meningkatkan performa aplikasi, sekali dibuat SP dikompile dan disimpan  pada database, ia berjalan lebih cepat dari pada uncompiled SQL command yang dikirimkan dari aplikasi.
  2. Karena disimpan didatabase, maka akan mengurangi trafic antara aplikasi dan Database, karena tidak mengirimkan berkali-kali uncompiled SQL dari aplikasi.
  3. Karena menggunakan SQL yang hampir tidak berubah banyak pola penulisan coding jika menggunakan DB yang berbeda (Oracle, MsSQL server, dll) jika nanti berniat migrasi database, sehinggap bisa dibilang SP portable syntaks
  4. Karena SP disimpan di sisi server, sehingga ia lebih aman, karena, administrator dapat memberikan akses siapa saja yang boleh atau tidak boleh mengakses SP.

Kerugian :

  1. Karena SP di proses pada server, sehingga SP akan berpengaruh pada kinerja server baik memory maupun processor.
  2. karena SP menggunakan declarative SQL, sehingga sulit menuliskan procedure dengan bisnis logic yang kompleks seperti language program lainnya seperti : Java, C+, C#, dll
  3. Kita tidak bisa men-debug  SP. iya sih bisa aja di debug (seperti pesan error yang ditampilkan jika terjadi error seperti yang saya buat dibawah, namun rasanya itu masih belum cukup baik).
  4. Menuliskan dan memaintain SP butuh kemampuan khusus yang mana tidak semua developer memilikinya.

Script PHP :

1. Buat File input.php

   1: <?php

   2: //ini untuk koneksi database, setingan bisa berbeda, tergantun setingan MySQL anda, jika

   3: //database anda tidak memakai password, maka nilai variable $pass dikosongkan saja

   4: $database = "test";

   5: $user = "root";

   6: $pass = "xyz";

   7: $host = "localhost";

   8: $sambung = mysql_connect($host,$user,$pass);

   9: mysql_select_db($database,$sambung) or die ("gagal");

  10: // akhir koneksi database

  11: if($_GET['act']=="simpan") //simpan data

  12: {

  13:     if($simpan = mysql_query("CALL simpan_input_user($_POST[id], '$_POST[nama]','$_POST[alamat]');"))

  14:     {

  15:         echo "berhasil";    

  16:     }

  17:     else

  18:     {

  19:         echo  mysql_errno($sambung).": ".mysql_error($sambung)."\n";

  20:         echo"<script>alert('Proses simpan gagal'); windows.history.back();</script>";

  21:     }

  22:     

  23: }

  24: ?>

  25: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  26: <html xmlns="http://www.w3.org/1999/xhtml">

  27: <head>

  28: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  29: <title>Test Input menggunakan procedure</title>

  30: </head>

  31: <body>

  32: <form action="index.php?act=simpan" method="post">

  33: <table cellpadding="2" cellspacing="2" border="0">

  34: <tr>

  35:     <td>No ID</td>

  36:     <td><input type="text" name="id" /></td>

  37: </tr>

  38: <tr>

  39:     <td>Nama :</td>

  40:     <td><input type="text" name="nama" /></td>

  41: </tr>

  42: <tr>

  43:     <td>Alamat :</td>

  44:     <td><input type="text" name="alamat" /></td>

  45: </tr>

  46:  

  47: <tr>

  48:     <td colspan="2"><input type="submit" value="SIMPAN" /><input type="reset" value="RESET" /></td>

  49: </tr>

  50: </table>

  51: </form>

  52: <br />

  53: <?PHP

  54: include "tampil.php";

  55: ?>

  56: </body>

  57: </html>

Tampilannya kurang lebih akan seperti ini :

image

Penjelasan Script :

  • Line 4 – 10 : merupakan setingan koneksi ke database, hal ini bisa berbeda dengan setingan MySQL pada database anda, jika anda mengkuti langkah-langkah pada server side dibawah nanti, saya berani bertaruh segelas susu (hehe biar sehat) paling yang berbeda nanti hanya pada setingan password Be right back
  • line 11 – 23 : merupakan proses send-request ke server, jadi cara kerjanya adalah : ketika form action HTML pada baris 32 – 51 dilakukan (SUBMIT), maka form akan mengirimkan data-data form ke dirinya sendiri (re-load), dengan menambahkan parameter “act” pada URL, ketika ditemukan browser menemukan parameter “act” tersebut, maka proses pada line 11 – 23 dilakukan, jika tidak, maka proses ini akan di lewati (skip).
  • line 13 : memanggil SP simpan_input_user dengan mengirimkan paramater-parameter yang dikirimkan dari form HTML.

2. Buat file tampilan.php

   1: <?php

   2: //setingan koneksi ke database

   3: $database = "test";

   4: $user = "root";

   5: $pass = "xyz";

   6: $host = "localhost";

   7: $sambung = mysql_connect($host,$user,$pass);

   8: mysql_select_db($database,$sambung) or die ("gagal");

   9: //akhir setingan koneksi kedatabase

  10: if(!empty($_GET['cari']))

  11: {

  12:     if($cari = mysql_query("CALL show_data_user('$_GET[cari]');"))

  13:     {

  14:         /* do nothing */    

  15:     }

  16:     else

  17:     {

  18:         echo  mysql_errno($sambung).": ".mysql_error($sambung)."\n";

  19:         echo"<script>alert('Error'); windows.history.back();</script>";

  20:     }

  21: }

  22: else

  23: {

  24:     $cari = mysql_query("CALL show_data_user(NULL)");

  25: }

  26:  

  27: ?>

  28: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  29: <html xmlns="http://www.w3.org/1999/xhtml">

  30: <head>

  31: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  32: <title>tampil data user</title>

  33: </head>

  34:  

  35: <body>

  36: <form method="GET" action="tampil.php?act=show">

  37: <input type="text" name="cari" />&nbsp;<input type="submit" value="Cari" />

  38: </form>

  39: <?php

  40:             while($hasil = mysql_fetch_array($cari))

  41:             {

  42:                 echo"id : $hasil[no_id]<br />".

  43:                     "nama : $hasil[nama]<br />".

  44:                     "alamat : $hasil[alamat]<br />".

  45:                     "<hr />";

  46:             }

  47:         

  48:     

  49: ?>

  50:  

  51: </body>

  52: </html>

Tampilan kira-kira akan seperti ini :

image

untuk saat ini tampilan belum menampilkan data apa-apa, karena belum terdapat data pada database.

Penjelasa Script :

  • Line 11 – 25 : karena form menggunakan method GET, maka browser akan men-check adakah paramater “cari” pada URL yang mengindikasikan tombol Search diklik (line10). jika terdapat parameter “cari” maka line 12 – 15 yang akan aktif, dimana nilai balikan query ini (jika ada) akan ditampilkan ke user oleh proses line 40 – 46. Sebaliknya jika tidak terdapat parameter “cari” pada URL, maka proses  22 – 25 yang akan berjalan, dimana form akan memanggil semua data pada tabel user dan hasil (jika ada) akan di tampilkan ke user oleh proses line 40 – 46.
  • Line 16 – 20 akan menampilkan pesan error kepada user, jika terjadi suatu masalah dalam menampilkan data.
  • Memanggil SP show_data_user dengan mengirimkan parameter yang dibutuhkan dari form pencarian.

Script Server Side :

1. Buat sebuah database pada MySQL anda dan beri nama database tersebut “test” (tanpa tanda petik)

2. Buat Database User

   1: CREATE TABLE `user` (

   2:   `no_id` int(10) NOT NULL,

   3:   `nama` varchar(50) DEFAULT NULL,

   4:   `alamat` varchar(100) DEFAULT NULL,

   5:   PRIMARY KEY (`no_id`)

   6: ) ENGINE=InnoDB DEFAULT CHARSET=latin1

3. Buat Procedure Simpan Input Data User

   1: DELIMITER $$

   2: USE `test`$$

   3: DROP PROCEDURE IF EXISTS `simpan_input_user`$$

   4: CREATE DEFINER=`root`@`localhost` PROCEDURE `simpan_input_user`(IN id INT(10),IN nama VARCHAR(50), IN alamat VARCHAR(100))

   5: BEGIN

   6:     INSERT INTO USER (no_id, nama, alamat) VALUES (id, nama, alamat);

   7:     END$$

   8: DELIMITER ;

3. Buat Procedure untuk menampilkan Data User

   1: DELIMITER $$

   2: USE `test`$$

   3: DROP PROCEDURE IF EXISTS `show_data_user`$$

   4: CREATE DEFINER=`root`@`localhost` PROCEDURE `show_data_user`(IN q_cari VARCHAR(10))

   5: BEGIN    

   6:     IF q_cari IS NULL THEN

   7:         SELECT*FROM USER;

   8:     ELSE 

   9:         SELECT*FROM USER WHERE user.no_id=q_cari;

  10:     END IF;    

  11:     END$$

  12: DELIMITER ;

yah kira-kira seginilah yang baru saya bisa bagikan ke anda, semoga ilmu yang sedikit ini bisa bermanfaat bagi kalian. Silahkan dicoba, dicopy codingnya juga gapapa..

salam.