Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

chèn dữ liệu XML vào mysql bằng php

Đối với dữ liệu XML mà bạn có, tôi thích phần mở rộng SimpleXML hơn, nó cung cấp mọi thứ bạn cần và không phải viết nhiều mã (nó là em gái của DOMDocument).

Vì vậy, đối với mỗi khách hàng trong dữ liệu đầu vào, bạn muốn tìm nạp 9 giá trị của mình hoặc lâu hơn. Bạn có thể định dạng các giá trị đó dưới dạng xpath:

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

Điều này hoạt động tương tự như với một truy vấn cơ sở dữ liệu. Bạn tạo một chuỗi chứa truy vấn cho XML bằng ngôn ngữ Xpath.

Và chúng tôi làm tương tự đối với SQL vì cả hai nên song hành cùng nhau, vì vậy đây là mẫu SQL theo:

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

Tất cả những gì cần làm bây giờ là mở XML và chỉ định các phần tử khách hàng để làm việc:

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

Sau đó, bạn chỉ cần đi trước từng khách hàng, lấy các giá trị, thoát khỏi chúng, chèn chúng vào truy vấn và chạy truy vấn SQL (hoặc tạo một truy vấn lớn hơn chứa nhiều bản ghi):

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

Vâng, đó là mã của bạn rồi. Như bạn có thể thấy, Sử dụng mảng, xpath và SQL, bạn có thể đơn giản hóa điều này thành một phần mở rộng tuyệt vời.

Đối với khách hàng đầu tiên trong XML mẫu của bạn, sau đó, điều này sẽ tạo ra truy vấn sau:

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

Toàn bộ mã-ví dụ:

$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. tôi có thể sử dụng một biến để chỉ định OUTFILE trong mysql không

  2. Lỗi MySQL / Amazon RDS:bạn không có SUPER đặc quyền ...

  3. Truy vấn Mysql để xóa các bình luận Wordpress trùng lặp?

  4. Bạn có thể thêm câu lệnh if trong ORDER BY không?

  5. Cách tốt nhất để đối phó với lỗi chính tả trong tìm kiếm toàn văn bản MySQL