将XML数据与MySQL表进行比较

时间:2012-06-17 14:04:45

标签: php xml compare

我通过网络服务获取xml数据

<ITEMS>
     <item id="uilldmduw"/>
     <item id="wl2323ldsaw"/>
</ITEMS>

我需要将此列表与我的数据库中的“items”表进行比较,并仅返回在其中一个xml节点中也存在id的行。

XML可以包含几百个节点,items表包含100k的行

什么是最好的方法

2 个答案:

答案 0 :(得分:0)

解析XML(例如使用SimpleXML)并将所有ID收集到一个数组中。然后在数据库查询中使用该数组:

$query = sprintf('SELECT id, field, field2
                  FROM table
                  WHERE
                    id IN(%s)',
                 implode(',', $id_array));

(请注意,此代码假定$id_array中的所有元素都保证是整数或正确的SQL转义。在使用此代码之前,您需要自己确保这一点,否则冒着SQL注入的风险)

答案 1 :(得分:0)

以下内容将为您提供xml文件中存在ID的所有行的列表。

<?php
$xml = '<ITEMS>
        <item id="uilldmduw"/>
        <item id="wl2323ldsaw"/>
    </ITEMS>';
$xml = simplexml_load_string($xml);

// do an xpath query and get all item id's 
$result = $xml->xpath( '//item[@id]' );

$idList = array();
foreach($result as $node) {
    $idList[] = '"' . (string)$node[ 'id' ] . '"';
}

// all id's are now in a string sequence
$idList = implode( ',', $idList );

$results = array();

// select all rows which have an id in the sequence
$sql = 'SELECT * FROM `table` WHERE `id` IN (' . $idList . ')';
$run = mysql_query( $sql, $db_conn );

if($run && mysql_num_rows($run)) {
    while(($fetch=mysql_fetch_assoc($run))!=false) {
        $result[] = $fetch;//store the results the way you want.
    }
}

//$results now contains the desired result
?>

希望这有帮助。