Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

masukkan data XML ke mysql dengan php

Untuk data XML yang Anda miliki, saya lebih suka ekstensi SimpleXML, itu dikirimkan dengan semua yang Anda butuhkan dan tidak banyak kode untuk ditulis (ini adalah adik perempuan DOMDocument).

Jadi untuk setiap pelanggan dalam data input, Anda ingin mengambil 9 atau lebih nilai Anda. Anda dapat merumuskan nilai-nilai itu sebagai xpath:

$values = <<<XPATH
(
    name
    |address
    |city
    |state
    |zip
    |phone
    |buyerinfo/shippingaddress/name
    |buyerinfo/shippingaddress/address
    |shippingDetail/saletax/saletaxamount
)
XPATH;

Ini berfungsi mirip dengan kueri basis data. Anda membuat string yang berisi kueri, untuk XML dalam bahasa Xpath.

Dan kami melakukan hal yang sama untuk SQL karena keduanya harus berjalan beriringan, jadi inilah pola SQL yang sesuai:

$pattern = <<<SQL
INSERT INTO customer
  (
    name, address, city, state, zip, phone, shipto, shipadderss, tax
  )
  VALUES
  (
    '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'
  )
SQL;

Yang dibutuhkan sekarang adalah membuka XML dan menentukan elemen pelanggan untuk dikerjakan:

$customers = simplexml_load_string($test)->customer; // "test.xml"

Kemudian Anda hanya perlu melakukan foreach atas setiap pelanggan, mendapatkan nilai, menghindarinya, memasukkannya ke dalam kueri dan menjalankan kueri SQL (atau membuat satu kueri yang lebih besar yang berisi lebih dari satu catatan):

foreach ($customers as $customer) 
{
    $data = $customer->xpath($values);
    $escaped = array_map('mysql_real_escape_string', $data);
    $query = vsprintf($pattern, $escaped);

    // you can now run the query now
    // ...
}

Ya, itu sudah menjadi kode Anda. Seperti yang Anda lihat, Memanfaatkan array, xpath, dan SQL, Anda dapat menyederhanakan ini secara luas.

Untuk pelanggan pertama dalam sampel-XML Anda, ini kemudian menghasilkan kueri berikut:

INSERT INTO customer
  (
    name, address, city, state, zip, phone, shipto, shipadderss, tax
  )
  VALUES
  (
    'customer 1','address 1', 'city 1', 'state 1', 'zip 1', 'phone 1', 'ship to', 'Ship address1', '2'
  )

Seluruh contoh kode:

$values = <<<XPATH
(
    name
    |address
    |city
    |state
    |zip
    |phone
    |buyerinfo/shippingaddress/name
    |buyerinfo/shippingaddress/address
    |shippingDetail/saletax/saletaxamount
)
XPATH;

$pattern = <<<SQL
INSERT INTO customer
  (
    name, address, city, state, zip, phone, shipto, shipadderss, tax
  )
  VALUES
  (
    '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'
  )
SQL;

$customers = simplexml_load_string($test)->customer; // "test.xml"

foreach ($customers as $customer)
{
    $data = $customer->xpath($values);
    $escaped = array_map('mysql_real_escape_string', $data);
    $query = vsprintf($pattern, $escaped);

    // you can now run the query now
    $result = mysql_query($query);
    if(mysql_errno())
    {
        printf(
            '<h4 style="color: red;">Query Error:</h4>
            <p>(%s) - %s</p>
            <p>Query:
              <pre>%s</pre>
            </p>
            <hr />',
            mysql_errno(),
            htmlspecialchars(mysql_error()),
            htmlspecialchars($query)
        );
    }
}


', mysql_errno(), htmlspecialchars(mysql_error()), htmlspecialchars($query) ); }}

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kueri data pegas untuk tanggal lokal mengembalikan entri yang salah - dikurangi satu hari

  2. Buat tabel sementara dalam pernyataan SELECT tanpa CREATE TABLE terpisah

  3. Pilih semua titik geospasial di dalam kotak pembatas

  4. Pilih tanggal dari db saya tanpa detik menggunakan PHP MySql

  5. Masalah menambahkan Kunci Asing menggunakan Tabel Alter dengan Database MYSQL yang ada - tidak dapat menambahkannya! Membantu!