1

外部ソースからロードしてdbテーブルに保存する必要がある動的なproductsxmlファイルがあります。ここで、現在の製品を含むxmlファイルをテーブルの内容と同期させたいと思います。したがって、xmlとdbテーブルの両方でIDを使用して製品を更新し、新しい製品を挿入し、dbテーブルで廃止された(xmlファイルにない)製品を削除するようにします
。XMLファイルマッピング の下の図を参照してください。

Productid->1およびproduct-name->book、
Productid->2およびProuct-name->pen

下の表

ID名
1冊
3本鉛筆

ここで、製品ID 1をxmlからの情報で更新し、製品ID 2をxmlからテーブルに挿入し、製品ID 3がxmlに見つからないため、テーブルから削除します。

助けていただければ幸いです。

4

1 に答える 1

2

目的のプロセスのフローチャートは既にあるので、非常に簡単です。

要件に従って行うため、データのサニタイズ/エスケープは行っていません。

XML FILE: (save it as testFeed.xml)

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <id>1</id>
        <name>book</name>
    </product>
    <product>
        <id>2</id>
        <name>pen</name>
    </product>
</products>

PHP Code:

<?php
$xml = simplexml_load_file( 'testFeed.xml' );
$xpath = $xml->xpath( '//product' );

$feed = array();
foreach( $xpath as $node ) {
    $feed[(string)$node->id] = (string)$node->name;  // id is key, name is value
}

// delete all entries from table where the table entries are not in the xml
$sql = 'DELETE FROM `table` WHERE id NOT IN 
          (' . implode( ',', array_keys( $feed ) ) . ')';
$run = mysql_query( $sql, $link );

//Now, insert/update - USE MySQL's "INSERT ... ON DUPLICATE UPDATE" feature
foreach( $xpath as $key => $node ) {
    $sql = 'INSERT INTO `table` (id,name) VALUES ("'.$key.'","'.$node.'") 
              ON DUPLICATE KEY UPDATE name="'.$node.'";'
    $run = mysql_query( $sql, $link );
}
?>

MySQL INSERT ... ON DUPLICATE UPDATEの例はこちら。

お役に立てれば。

于 2012-06-22T06:17:43.953 に答える