Mysql
 sql >> база данни >  >> RDS >> Mysql

вмъкнете XML данни в mysql с php

За XML данните, които имате, бих предпочел разширението SimpleXML, то се доставя с всичко необходимо и не е толкова много код за писане (това е малката сестра на DOMDocument).

Така че за всеки клиент във входните данни искате да извлечете вашите 9 или повече стойности. Можете да формулирате тези стойности като xpath:

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

Това работи подобно на заявката за база данни. Вие създавате низ, който съдържа заявката, за XML на езика Xpath.

И ние правим същото за SQL, тъй като и двете трябва да вървят ръка за ръка, така че ето е съответния SQL модел:

$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;

Всичко, което трябва сега, е да отворите XML и да посочите елементите на клиента, върху които да работите:

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

След това трябва само да достигнете до всеки клиент, да получите стойностите, да ги избегнете, да ги вмъкнете в заявката и да изпълните SQL заявката (или да създадете една по-голяма заявка, съдържаща повече от един запис):

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
    // ...
}

Да, това вече е вашият код. Както можете да видите, като използвате масиви, xpath и SQL, можете да опростите това до голяма степен.

За първия клиент във вашия примерен XML след това генерира следната заявка:

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'
  )

Целият код-пример:

$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. Трябва ли таблиците за свързване да имат повече от един първичен ключ от друга идентифицираща таблица?

  2. mysql - Създаване на редове спрямо колони

  3. Generic Killed грешка в PHP скрипт

  4. MySQL скъпоценен камък на OSX 10.7 Lion

  5. Как мога правилно да използвам PDO обект за параметризирана SELECT заявка