Insert Data Menggunakan Database MySQL, PostgreSQL, Oracle

1 07 2008

Setelah artikel mengenai “Bermain Dynamic Tabel Row dengan menggunakan Javascript”, ada teman yang bertanya bagaimana sih caranya memasukkan datanya ke dalam database setelah nilai dari masing – masing variabel dari element javascript tersebut didapat, saya pikir seharusnya seorang programmer php harus sudah mengetahui pengetahuan basic mengenai CRUD (Create, Read, Update, Delete) terhadap database. Tapi setelah dipikir – pikir, oke-lah beramal dan berbagi pengetahuan tentang pengetahuan PHP apa salahnya, barangkali ada teman – teman yang baru mau mendalami pengetahuan ini yang akan terbantu dengan artikel ini, berikut pembahasannya.

Dalam artikel ini saya akan coba membahas bagaimana cara insert data ke sebuah table database terhadap tiga database berbeda, yaitu, mysql, postgres dan oracle dengan menggunakan php sebagai bahasa pemrograman, tapi sebelum melangkah ke pembahasan tersebut, kita perlu mengambil “dynamic.php” dari source artikel tersebut, dengan terlebih dahulu melakukan sedikit modifikasi pada source code sebagai berikut.

<html>
 <head>
  <title>Dynamic Table, Add / Delete Row</title>
 </head>
 <body>
  <form action="dynamic3.php" name="myForm" method="post">
   <div class="area">
    <div class="toolbar-clean">
     <a href="javascript:addNewRow();"><span>New Row</span></a>
     <a href="javascript:deleteRow();"><span>Delete Row</span></a>
    </div>
    <table width="80%" cellpadding="0" cellspacing="0" border="1" id="lineItemTable">
     <tr>
      <th width="0%"> </th>
      <th width="2%" align="center">
       <input type="checkbox" name="checkMaster" id="checkMaster" onClick="clickAll();"/>
      </th>
      <th width="24%">Nomor Induk</th>
      <th width="24%">Nama Siswa</th>
      <th width="50%">Alamat Lengkap</th>
     </tr>
    </table>
    <table>
     <tr><td><input type="submit" value="SUBMIT"></td></tr>
    </table>
   </div>
  </form>
 </body>
</html>

Pada source code diatas ada sedikit penambahan pada baris ke 05, 23 dan 26 yaitu penambahan tag form dan tombol submit untuk melakukan request action terhadap server, dan melakukan proses lanjutan terhadap database dengan melakukan proses insert, dalam pembahasan ini sengaja dibuat tiga buah file source code yang berbeda untuk setiap transaction insert terhadap database, file tersebut adalah “dynamic1.php” untuk transaksi mysql, “dynamic2.php” untuk transaksi postgres, dan yang terakhir “dynamic3.php” untuk transaksi oracle. Kemudian buatlah sebuah table dengan struktur sebagai berikut untuk dibuat sebagai contoh kasus:

Nama Field Type Field Primary Key
id Integer / Numeric Yes
no_induk Varchar(10)
nama Varchar(30)
alamat Varchar(45)

Script Create Table akan seperti berikut untuk ke tiga jenis database tersebut:

MySql

CREATE TABLE "latih"."tbl_siswa" (
  "id" int(10) unsigned NOT NULL auto_increment,
  "no_induk" varchar(10) default NULL,
  "nama" varchar(30) default NULL,
  "alamat" varchar(45) default NULL,
  PRIMARY KEY ("id")
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Postgres

CREATE TABLE tbl_siswa
(
  id numeric NOT NULL DEFAULT 0,
  no_induk varchar(10),
  nama varchar(30),
  alamat varchar(45),
  CONSTRAINT pk_id PRIMARY KEY (id)
)
WITHOUT OIDS;
ALTER TABLE tbl_siswa OWNER TO postgres;
GRANT ALL ON TABLE tbl_siswa TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE tbl_siswa TO public;

Oracle

CREATE TABLE TBL_SISWA (
  ID        INTEGER       NOT NULL,
  NO_INDUK  VARCHAR2 (10),
  NAMA      VARCHAR2 (30),
  ALAMAT    VARCHAR2 (45),
  CONSTRAINT PK_TBL_SISWA
  PRIMARY KEY ( ID )
    USING INDEX
     TABLESPACE USERS PCTFREE 10
     STORAGE ( INITIAL 65536 ))
   TABLESPACE USERS
   PCTFREE 10
   INITRANS 1
   MAXTRANS 255
  STORAGE (
   INITIAL 65536
   MINEXTENTS 1
   MAXEXTENTS 2147483645
 )
   NOCACHE;

Setelah table terbentuk di masing – masing database, sekarang kita akan membahas bagaimana cara insert data terhadap table tersebut menggunakan php. Tapi jangan lupa untuk terlebih dahulu mengatur configurasi pada “php.ini” dan mengaktifkan “extension=php_mysql.dll” dan “extension=php_mysqli.dll” untuk dapat mengakses database mysql (defaultnya sudah aktif), kemudian “extension=php_pgsql.dll” untuk mengakses postgres, kemudian yang terakhir “extension=php_oci8.dll” untuk mengakses oracle. Sekarang kita bahas script php-nya, pertama – tama kita akan membuat file “dynamic1.php” yang berisi proses transaksi insert terhadap server mysql, berikut source codenya:

<?
 $link = mysql_connect('localhost', 'root', 'admin');

 if (!$link) {
  die('Could not connect: ' . mysql_error());
 }

 $index         = $_POST['index'];
 $check         = $_POST['check'];
 $nomorInduk    = $_POST['nomorInduk'];
 $nomorRegister = $_POST['nomorRegister'];
 $namaSiswa     = $_POST['namaSiswa'];
 $alamatSiswa   = $_POST['alamatSiswa'];

 echo 'Connected successfully <br>';

 $link1 = mysql_select_db('latih');
 if (!$link1) {
  die('Could not select database');
 }
 echo 'Connected schema <br>';

 $table = 'tbl_siswa';
 if (is_array($index)) {
  echo count($index)."<br>";
  for ($i = 0; $i < count($index); $i++) {
   echo $index[$i]." ".$nomorInduk[$i]." ".$namaSiswa[$i]." ".$alamatSiswa[$i]."<br>";
   mysql_query("LOCK TABLES " . $table . " WRITE;");
   mysql_query("INSERT INTO " . $table . " (no_induk, nama, alamat) VALUES ('$nomorInduk[$i]','$namaSiswa[$i]','$alamatSiswa[$i]');");
   mysql_query("UNLOCK TABLES;");
  }
 }

 mysql_close($link);
?>

Berikutnya dilanjutkan dengan pembahasan proses insert terhadap table pada database postgres yang source code nya dapat dilihat pada file “dynamic2.php”:

<?
 $link = pg_connect("host=localhost port=5432 dbname=postgres user=postgres password=admin");

 if (!$link) {
  die('Could not connect: ' . pg_last_error());
 }

 $index         = $_POST['index'];
 $check         = $_POST['check'];
 $nomorInduk    = $_POST['nomorInduk'];
 $nomorRegister = $_POST['nomorRegister'];
 $namaSiswa     = $_POST['namaSiswa'];
 $alamatSiswa   = $_POST['alamatSiswa'];

 echo 'Connected successfully <br>';

 $table = 'tbl_siswa';
 if (is_array($index)) {
  echo count($index)."<br>";
  for ($i = 0; $i < count($index); $i++) {
   echo $index[$i]." ".$nomorInduk[$i]." ".$namaSiswa[$i]." ".$alamatSiswa[$i]."<br>";

   $last_id = pg_query($link, "SELECT MAX(id) AS newid FROM " . $table . ";");

   if ($line = pg_fetch_assoc($last_id)) {
    $new_id = $line['newid'];
   }

   if ($new_id == '' || $new_id == '0') {
    $new_id = 1;
   } else {
    $new_id = $new_id + 1;
   }
   echo 'NEW '.$new_id."<br>";

   pg_query($link, "INSERT INTO " . $table . " (id, no_induk, nama, alamat) VALUES ($new_id, '$nomorInduk[$i]','$namaSiswa[$i]','$alamatSiswa[$i]');");
  }
 }

pg_close($link);
?>

Dan yang terakhir dilanjutkan dengan pembahasan proses insert terhadap table pada database oracle yang source code-nya dapat dilihat pada file “dynamic3.php”:

<?
 $link = oci_connect("scott","tiger","orcl");

 if (!$link) {
  $e = oci_error();
  print htmlentities($e['message']);
  exit;
 }

 $index         = $_POST['index'];
 $check         = $_POST['check'];
 $nomorInduk    = $_POST['nomorInduk'];
 $nomorRegister = $_POST['nomorRegister'];
 $namaSiswa     = $_POST['namaSiswa'];
 $alamatSiswa   = $_POST['alamatSiswa'];

 echo 'Connected successfully <br>';

 $table = "tbl_siswa";
 if (is_array($index)) {
  echo count($index)."<br>";
  $last_id = oci_parse($link, "SELECT MAX(id) AS newid FROM " . $table);

  if (!$last_id) {
   $e = oci_error($link);
   print htmlentities($e['message']);
   exit;
  }
  oci_execute($last_id);

  if ($line = oci_fetch_assoc($last_id)) {
   $new_id = $line['NEWID'];
  }

  if ($new_id == '' || $new_id == '0') {
   $new_id = 1;
  } else {
   $new_id = $new_id + 1;
  }
  echo 'NEW '.$new_id."<br>";

  for ($i = 0; $i < count($index); $i++) {
   echo $index[$i]." ".$nomorInduk[$i]." ".$namaSiswa[$i]." ".$alamatSiswa[$i]."<br>";
   $increment = oci_parse($link, "INSERT INTO " . $table . " (id, no_induk, nama, alamat) VALUES (:par1,:par2,:par3,:par4)");

   oci_bind_by_name($increment, ":par1", $new_id);
   oci_bind_by_name($increment, ":par2", $nomorInduk[$i]);
   oci_bind_by_name($increment, ":par3", $namaSiswa[$i]);
   oci_bind_by_name($increment, ":par4", $alamatSiswa[$i]);

   oci_execute($increment);
   $new_id++;
  }
 }

 oci_close($link);
?>

Sedikit penjelasan mengenai script php untuk proses insert data oracle, pada baris 21 dan 31 ada script untuk mengambil data dengan menggunakan alias “as newid”, jika kita menggunakan oracle database pada aplikasi yang kita buat, maka driver oracle akan mengembalikan data dengan variabel yang sudah dirubah menjadi upper case, jadi seperti yang terlihat pada baris 31 jika script-nya seperti ini “$new_id = $line['newid'];” maka nilai tidak akan terambil.

Jika ada kekurangan atau masukan yang dapat meningkatkan kemampuan jangan sungkan untuk memberikan komentar, berikut source code lengkap dari proses diatas dalam satu file berupa file pdf yang dapat diambil di Source Code.

  View Pdf Version


Actions

Information

21 responses

4 07 2008
adinda

ok deh, baru dibaca ^_^
insyaAlloh nanti dipraktekkan :-)

tunggu saja komentarku berikutnya

14 10 2008
DJ

ma nyoss kalau kata bonda mah…, nuhun ah…. ilmunya

25 05 2010
andi

trims ilmu-nya. sangat bermanfaat.

25 05 2010
agienthea

@DJ: makasih kembali.

@andi: makasih..

14 07 2010
asep

pak agin bagus banget tutorialnya…btw ada yg buat java ga?ajarin donk pak terutama postgree ma oracle.

14 07 2010
agienthea

@asep: sebenarnya ada sih…. cuman pembahasan nya lebih panjang… soalnya java itu luas… mudah2an ntar ada waktu utk menuliskan nya ke blog yah… ;)

14 07 2010
asep

owh gitu…pak agien saya lgi buat program java utk insertnya sy menggunakan dao databasenya pake postgresql ini pak dao nya :
public void insert(Agama agama) throws Exception {
String sql = “INSERT INTO agama_tbl(kdagama,nmagama)”+
” VALUES (?,?)”;
PreparedStatement st = this.conn.prepareStatement(sql);
st.setString(1, agama.getKdAgama());
st.setString(2, agama.getNmAgama());
st.executeUpdate();
System.out.println(“test :” + sql);
st.close();
}

tapi masih salah bisa minta tolong dikoreksi ga pak sqlnya …? please help me..

14 07 2010
agienthea

@asep: kalo error berarti ada printStackTrace nya kan…? bisi diliatin printStackTrace nya biar bisa tela’ah lebih detil…

15 07 2010
asep

Maap pak masih awam maksudnya printStackTrace itu apa ya?
ini kelas action nya pak dari dao yg tdi. Terimakasih atas Ilmunya..sy tunggu

package action;

import dao.AgamaDAO;
import dao.sql.AgamaDAOImpl;
import javax.servlet.http.HttpServletRequest;
import model.agama;
import util.DBUtil;

/**
*
* @author asep
*/
public class AgamaAction implements ActionInterface{

public String execute(HttpServletRequest request) {
DBUtil dbUtil = new DBUtil();
AgamaDAO agmDAO = new AgamaDAOImpl(dbUtil.getConn());
agama agama = new agama();
agama.setKdagama(request.getParameter(“kdAgama”));
agama.setNmagama(request.getParameter(“nmAgama”));
try{
System.out.println(“test : act” );
agmDAO.insert(agama);
}catch(Exception ex){

}finally{
dbUtil.closeConn();
}
System.out.println(“test : act” );
request.setAttribute(“msg”,”Data yang anda Masukan Berhasil”);
return “controller?action=home”;
}

}

15 07 2010
agienthea

coba dibagian ini… didalam catch nya dikasih “ex.printStackTrace();” dengan contoh seperti dibawah…

try{
System.out.println(“test : act” );
agmDAO.insert(agama);
}catch(Exception ex){
ex.printStackTrace();
}finally{
dbUtil.closeConn();
}

trus coba di running lg… ntar klo memang ada error… di console ngeluarin log error… biasanya banyak bgt tulisan nya…. nah tulisan itu coba kasih ke sy….

15 07 2010
asep

oke 2 pak agien udah bisa…makasih ya atas ilmunya.

Thanx’s alot and Hatur Nuhun

15 07 2010
agienthea

@asep: okeh… sawangsulna…. bagja tiasa nulungan batur… :D

15 07 2010
asep

pak agien mau tanya lagi…maap ya pak..
klo dikelas action digabungin update,delete dan list bisa ga ya pak?
biar di jspnya tinggal dikasih perintah aja..

Nuhun

13 01 2011
sapril

lumayan gan :D
tapi bisa tidak yang update data di oracle menggunakan php
thanks

klo bisa kirim ke email
‘saprildwi@ymail.com’

14 01 2011
agienthea

@sapril: seharusnya bisa…

tinggal ganti aza baris perintah yg ini..

$increment = oci_parse($link, “INSERT INTO ” . $table . ” (id, no_induk, nama, alamat) VALUES (:par1,:par2,:par3,:par4)”);

menjadi (misal)

$increment = oci_parse($link, “UPDATE ” . $table . ” SET no_induk = :par2, nama = :par3, alamat = :par4 WHERE id = :par1″);

script yang lain nya sama.

20 04 2011
kurniyawan

kalo buat create data peta dengan database postgre gmn bos??seumpama mw menambah point lagi dengan create database??mohon pencerahannya.

24 05 2011
agienthea

@kurniyawan: maaf mas, kebetulan saya blom pernah dapat project utk GIS, tapi secara teori seharusnya bisa menggunakan insert data ke table di database postgre dengan perintah “INSERT INTO nama_tables (‘nama_fields1′, ‘nama_fields2′) values (value1, value2);” atau misal membuat table baru dan insert data secara sequential dengan mengeksekusi 2 perintah berturut2.

“CREATE TABLE nama_table
(
nama_field1 numeric NOT NULL DEFAULT 0,
nama_field1 varchar(10),
CONSTRAINT pk_nama_field1 PRIMARY KEY (nama_field1)
)
WITHOUT OIDS;
ALTER TABLE nama_table OWNER TO postgres;
GRANT ALL ON TABLE nama_table TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE nama_table TO public;”

dan

“INSERT INTO nama_tables (‘nama_fields1′, ‘nama_fields2′) values (value1, value2);”

mudah2an membantu.

23 03 2012
iwan newbie

kalo untuk mencari/search gmn gan ?

23 03 2012
agienthea

@iwan: maaf bisa lebih di perjelas maksud pertanyaannya..?

23 03 2012
iwan newbie

thx, sudah merespon pertanyaan saya
maksudnya begini pak…
saya mempunyai data dengan menggunakan postgresql..
nah pertanyaannya adalah source code php dari View,edit dan cari. data tersebut dengan form cari.

24 03 2012
agienthea

@Iwan: terima kasih mas Iwan telah berkunjung ke blog saya, mudah2an secepatnya saya bisa membuat artikel khusus atas request mas Iwan ini…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s




Follow

Get every new post delivered to your Inbox.