сохранить массив объектов в базе данных MySQL - PullRequest
0 голосов
/ 09 августа 2011

вот моя задача. Я проанализировал 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 ]

3 голосов
/ 09 августа 2011

Это будет делать то, что вам нужно:

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.";
    }
}
2 голосов
/ 09 августа 2011

Вот как вставить из XML напрямую, используя PDO и Подготовленные операторы :

$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.Более практичный и эффективный подход описан в

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...