这是我的任务。我已经解析了一个xml文档并将其所有数据存储在一个数组中。数组格式为
Array(
[0]=> deals Object(
[deal_id]=>...
[deal_title]=>...
)
[1]=> deals Object(
[deal_id]=>....
[deal_title]=>...
)
)
我需要做的是在mysql数据库中存储每个对象的值,但不是所有对象的标签都应该存储在同一个数据表中。 我第一次创建数组的原因是相同的php文件将解析xml然后将值插入数据库中或者如果数据库中已存在具有相同deal_id的条目将更新相应的表。所以我认为在数组中使用xml将有助于进一步检查代码。 如果有人有不同的建议我会很高兴听到..
提前致谢!!!
<?xml version="1.0" encoding="UTF-8"?>
<deals>
<deal>
<id>1</id>
<title>title</title>
<city>city<city>
<price>20</price>
<url>http://....</url>
<previous_price>30</previous_price>
<discount> 10</discount>
<image>http://....</image>
<description> description</description>
<purchases> 1</purchases>
<address>address</address>
<latitude>30.5666</latitude>
<longitude>403.6669</longitude>
<start>datetime</start>
<end>datetime</end>
<active>true</active>
<category>category</category>
<type>type</type>
</deal>
</deals>
这是xml文件结构
答案 0 :(得分:3)
这将满足您的需求:
foreach ($array as $deal) {
$title = mysql_real_escape_string($deal['deal_title']);
$id = int($deal['deal_id']);
if ($id) {
$query = "INSERT INTO deals (id, title) VALUES ($id, '$title') ON DUPLICATE KEY UPDATE deals SET title = '$title' WHERE id = $id";
mysql_query($query);
} else {
echo "ID is not a valid integer.";
}
}
答案 1 :(得分:2)
以下是使用PDO和Prepared Statements直接从XML插入的方法:
$deals = simplexml_load_string($xml);
foreach($deals->deal as $deal) {
// assuming you created a $pdo object before
$pdo->prepare(
'INSERT
INTO deals (id, title, …, type)
VALUES (:id, :title, …, :type)
ON DUPLICATE KEY
UPDATE deals
SET title = :title, …, type = :type
WHERE id = :id
');
$pdo->execute(
array(
':id' => (string) $deal->id,
':title' => (string) $deal->title,
…
':type' => (string) $deal->type,
)
);
}
请注意,这将为XML中的每个$ deal创建一个Query。
中描述了一种更实用,更高效的方法