将对象数组存储到mysql数据库

时间:2011-08-09 12:34:01

标签: php mysql arrays object

这是我的任务。我已经解析了一个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文件结构

2 个答案:

答案 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)

以下是使用PDOPrepared 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。

中描述了一种更实用,更高效的方法