Cara menggunakan for xml mysql

Beberapa hari yang lalu, saya telah memposting artikel bagaimana membuat script PHP untuk mengimport data dari XML ke MySQL. Nah… untuk artikel kali ini, saya akan coba bahas kebalikannya yaitu membuat script PHP untuk export data dari MySQL ke XML.

Mau tahu caranya? Simak artikel ini baik-baik ya 🙂

Dalam artikel ini, kita akan memanfaatkan data yang telah tersimpan dalam tabel ‘book’ MySQL seperti yang sudah dibahas di artikel import data dari XML ke MySQL. Nah.. tujuan dari script yang akan kita buat ini nanti yaitu mengenerate dokumen XML dari data yang telah tersimpan dalam tabel ‘book’ tersebut.

OK.. bagaimana cara membuat scriptnya? pertama kita buat asumsi terlebih dahulu bahwa dokumen XML yang akan kita hasilkan akan berbentuk seperti ini

<?xml version='1.0'?>
<data>
   <book>
    .
    .
    .
   </book>
   <book>
    .
    .
    .
   </book>
    .
    .
</data>

Nama tag <book>…</book> ini nanti misalkan kita ambil dari nama tabelnya yaitu ‘book’. Sedangkan nama tag properti dari setiap buku, nantinya akan diambil dari nama field-fieldnya. Sehingga diharapkan nantinya struktur dokumen XML nya berbentuk seperti di bawah ini

<?xml version='1.0'?>
<data>
   <book>
      <id>...</id>
      <author>...</author>
      <title>...</title>
      <genre>...</genre>
      <price>...</price>
      <publish_date>...</publish_date>
      <description>...</description>
   </book>
   <book>
     <id>...</id>
      <author>...</author>
      <title>...</title>
      <genre>...</genre>
      <price>...</price>
      <publish_date>...</publish_date>
      <description>...</description>
   </book>
    .
    .
</data>

Nah.. dengan struktur di atas, bagaimana bentuk script PHP nya?

export2xml.php

<?php

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

$namaTabel = "book";

header('Content-Type: text/xml');

$query = "SELECT * FROM $namaTabel";
$hasil = mysql_query($query);
$jumField = mysql_num_fields($hasil);

echo "<?xml version='1.0'?>";
echo "<data>";
while ($data = mysql_fetch_array($hasil))
{
   echo "<".$namaTabel.">";
   for ($i=0; $i<=$jumField-1; $i++)
   {
      $namaField = mysql_field_name($hasil, $i);
      echo "<".$namaField.">".$data[$namaField]."</".$namaField.">";
   }
   echo "</".$namaTabel.">";
}
echo "</data>";
?>

Penjelasan:

Perintah header('Content-Type: text/xml'); digunakan untuk memberitahukan ke browser bahwa hasil output script adalah dalam format XML, bukan HTML.

Perintah mysql_num_fields() digunakan untuk menghitung jumlah field yang dihasilkan dari sebuah query SQL. Jumlah field ini nanti akan digunakan untuk looping ketika proses membuat tag properti dari setiap data buku.

Sedangkan perintah mysql_field_name() digunakan untuk membaca nama field pada urutan tertentu sesuai nomor indeksnya.

Perhatikan contoh penggunaan function mysql_field_name() berikut ini

<?php
$query = "SELECT * FROM book";
$hasil = mysql_query($query);

// akan memunculkan nama field pertama dari hasil query (field: ID) 
echo mysql_field_name($hasil, 0); 

// akan memunculkan nama field kedua dari hasil query (field: AUTHOR) 
echo mysql_field_name($hasil, 1);

// akan memunculkan nama field ketiga dari hasil query (field: TITLE) 
echo mysql_field_name($hasil, 2);
?> 

Dari contoh tersebut, maka mysql_field_name() dapat kita gunakan untuk mengenerate nama tag properti dari data buku yang kebetulan sama dengan nama fieldnya.

Hasil dari script export2xml.php di atas akan seperti di bawah ini:

Cara menggunakan for xml mysql

Bagikan artikel ini jika bermanfaat !


Misalkan Anda memiliki data berformat XML yang selanjutnya ingin Anda import ke dalam database MySQL. Apa yang akan Anda lakukan? Cara yang bisa Anda lakukan adalah dengan menggunakan tool seperti Navicat. Dengan tool ini, Anda bisa import data dengan cepat. Namun sayang… tool ini berbayar :-(.

Trus… bisakah tool seperti phpMyAdmin menangani import data XML ke dalam MySQL? he.. 3x sepertinya tidak bisa. CMIIW.

Alternatif cara yang lain untuk import data ini adalah dengan membuat tool sendiri dengan sebuah script PHP. Mau tahu caranya?

OK.. sebelum melangkah lebih jauh tentang cara import data XML ke MySQL, sudahkah Anda mengetahui apa itu XML? XML atau Xtensible Markup Languange adalah suatu representasi data dalam bentuk obyek. Representasi data dalam bentuk obyek tersebut disajikan dalam format seperti halnya tag HTML.

Berikut ini adalah sebuah contoh dokumen XML yang merepresentasikan data buku yang terdapat dalam sebuah toko buku.

databuku.xml

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
   <book id="bk103">
      <author>Corets, Eva</author>
      <title>Maeve Ascendant</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-11-17</publish_date>
      <description>After the collapse of a nanotechnology 
      society in England, the young survivors lay the 
      foundation for a new society.</description>
   </book>
</catalog>

Dokumen XML di atas menyajikan 3 buah buku beserta keterangannya yang kesemuanya disajikan dalam bentuk obyek dengan tag seperti halnya HTML. Dalam setiap buku, terdapat 7 buah properties yaitu ID buku, author (pengarang), title, genre (jenis buku), price, publish_date dan description. Maaf sampel XML nya ambil dari situs asing, so… bahasanya Inggris 🙂

Nah.. dalam artikel ini akan dibahas bagaimana cara mengimport data buku yang ada dalam dokumen XML di atas ke dalam database MySQL.

Sebelum proses importing data, hal utama yang harus Anda lakukan terhadap data dari dokumen XML di atas adalah memparsing masing-masing obyek, atau membaca value dalam setiap obyeknya. Sebagai contoh, kita akan membaca data dari buku dengan id ‘bk101’. Dari proses parsing ini, kita harus bisa mendapatkan data keterangan tentang buku tersebut, yaitu authornya siapa, title nya apa dsb.

So.. dengan demikian bagaimana cara membaca value dari setiap obyek dalam dokumen XML? Don’t worry, dalam PHP telah tersedia function untuk proses parsing XML ini. Function yang dimaksud adalah:

simplexml_load_file(nama file XML);

OK.. sekarang kita akan mencoba membuat script PHP untuk memparsing data buku dari dokumen XML databuku.xml di atas.

<?php
$dataxml = simplexml_load_file('databuku.xml');
 
foreach($dataxml->book as $buku)
{
   echo "ID buku: ".$buku['id']."<br>";
   echo "Author : ".$buku->author."<br>";
   echo "Title : ".$buku->title."<br>";
   echo "Genre : ".$buku->genre."<br>";
   echo "Price : $ ".$buku->price."<br>";
   echo "Published Date : ".$buku->publish_date."<br>";
   echo "Description : ".$buku->description."<hr>";
}
?>

Penjelasan:

Setelah dokumen databuku.xml diparsing dengan function simplexml_load_file(), maka selanjutnya menampilkan data hasil parsingnya. Sebelum kita menampilkan data hasil parsing, kita lihat terlebih dahulu format XML nya dari data buku. Setiap data buku, ditandai dengan tag pembuka <book> dan ditutup dengan </book>. Sedangkan properti dari buku, seperti author, title dan sebagainya terdapat di dalam tag <book>…</book> tersebut.

Nah… oleh karena itu untuk menampilkan author dari buku, gunakan perintah

Sedangkan untuk menampilkan ID dari buku, gunakan perintah

karena ID buku merupakan atribut dari <book>…</book>

Untuk menampilkan semua data buku, kita menggunakan looping foreach() seperti di atas. Hasil dari script akan diperoleh tampilan seperti di bawah ini

Cara menggunakan for xml mysql

OK… cara memparsing setiap data buku kita sudah tahu, sekarang bagaimana mengimportnya ke database MySQL.

Terlebih dahulu, kita siapkan tabel untuk menyimpan data bukunya. Berikut ini adalah contoh struktur tabelnya

CREATE TABLE `book` (
  `id` varchar(5),
  `author` varchar(30),
  `title` varchar(30),
  `genre` varchar(30),
  `price` float,
  `publish_date` date,
  `description` text,
  PRIMARY KEY(`id`)
)

Untuk proses import data, kita harus memodifikasi script di atas menjadi seperti di bawah ini.

<?php

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

$dataxml = simplexml_load_file('databuku.xml');

foreach($dataxml->book as $buku)
{
   $id = $buku['id'];
   $author = $buku->author;
   $title = addslashes($buku->title);
   $genre = $buku->genre;
   $price = $buku->price;
   $publish_date = $buku->publish_date;
   $description = $buku->description;
   $query = "INSERT INTO book 
                 VALUES ('$id', '$author', '$title', '$genre', '$price', '$publish_date', '$description') ";
   mysql_query($query);
}

?>

Karena pada dasarnya konsep import data adalah proses menyisipkan data ke dalam tabel, maka digunakanlah query SQL “INSERT INTO” pada script di atas.

Oya… mungkin Anda bertanya, mengapa untuk ‘title’ dari buku diberikan perintah addslashes() pada script di atas? Ya… alasannya adalah karena bila kita lihat pada data buku yang ada dalam dokumen XML di atas, maka terdapat buku yang titlenya mengandung tanda petik yaitu “XML Developer’s Guide“. Bila Anda tidak menggunakan addslashes() maka data tersebut tidak aka tersimpan karena terdapat error pada proses insert data. Dengan diberikannya addslashes() maka judul buku tersebut menjadi “XML Developer\’s Guide”.

Hasil dari proses import dengan script PHP di atas tampak pada tampilan tabel berikut ini

Cara menggunakan for xml mysql

Mudah bukan caranya? Selamat mencoba ya. Oya.. mudah-mudahan artikel ini memberikan ide bagi Anda untuk membuat web based tool yang berguna dalam proses import data dari XML ke MySQL.

Bagikan artikel ini jika bermanfaat !