Обновление таблицы БД из XML файлов

Два примера чтения xml файлов, которые обновляют цены и остатки в базе данных интернет магазина.

Пример файла:

<?xml version="1.0" encoding="utf-8"?>
<stocks date="2018-01-30">
	<item>
		<article>105AG</article>
		<name>105AG "Ангел" Ночник</name>
		<stock>0</stock>
		<price>483.00</price>
	</item>
	<item>
		<article>105BB</article>
		<name>105BB "Медведь" Ночник</name>
		<stock>40</stock>
		<price>39.00</price>
	</item>
	...
</stocks>
HTML

Чтение файла и обновление записей в БД:

Для доступа к БД используется библиотека PDO MySQL.

// Подключение к БД.
$dbh = new PDO('mysql:dbname=НАЗВАНИЕ_БД;host=localhost', 'ЛОГИН', 'ПАРОЛЬ');

$data = simplexml_load_file('http://site.com/file.xml');
foreach ($data->item as $row) {
	$articool = strval($row->article);
	$stock    = intval($row->stock);
	$price    = floatval($row->price);

	// Поиск товара в БД по артикулу.
	$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `articool` = ?");
	$sth->execute(array($articool));
	$prod = $sth->fetch(PDO::FETCH_ASSOC);

	// Обновление товара.
	if (!empty($prod)) {
		$sth = $dbh->prepare("UPDATE `prods` SET `price` = ?, `stock` = ? WHERE `id` = ?");
		$sth->execute(array($price, $stock, $prod['id']));
	}
}
PHP

1C формирует файлы с использованием кириллицы и значения хранятся в атрибутах элементов:

<Таблица ДатаАкуальности="30.01.2018 9:07:21">
	<element>
		<Артикул Артикул="002040"/>
		<Наименование Наименование="Светильник SOLO CYL MR16 ХРОМ/ПРОЗРАЧНЫЙ"/>
		<Цены Розничная="1436" Оптовая="870"/>
		<Остаток Остаток="10"/>
	</element>
	<element>
		<Артикул Артикул="002041"/>
		<Наименование Наименование="Светильник ROSA CYL MR16 ХРОМ/ПРОЗРАЧНЫЙ"/>
		<Цены Розничная="876" Оптовая="438"/>
		<Остаток Остаток="15"/>
	</element>
	...
</Таблица>
HTML
// Подключение к БД.
$dbh = new PDO('mysql:dbname=НАЗВАНИЕ_БД;host=localhost', 'ЛОГИН', 'ПАРОЛЬ');

$data = simplexml_load_file('http://site.com/file_1c.xml');
foreach ($data->item as $row) {
	$articool = strval($row->Артикул['Артикул']);
	$stock    = intval($row->Остаток['Остаток']);
	$price    = floatval($row->Цены['Розничная']);

	// Поиск товара в БД по артикулу.
	$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `articool` = ?");
	$sth->execute(array($articool));
	$prod = $sth->fetch(PDO::FETCH_ASSOC);

	// Обновление товара.
	if (!empty($prod)) {
		$sth = $dbh->prepare("UPDATE `prods` SET `price` = ?, `stock` = ? WHERE `id` = ?");
		$sth->execute(array($price, $stock, $prod['id']));
	}
}
PHP
21.06.2018, обновлено 19.10.2019
6050

Комментарии

, чтобы добавить комментарий.

Другие публикации

Обработка и вывод рейтинга в PHP
В продолжении статьи о верстки рейтинга, рассмотрим PHP-скрипты системы отзывов и рейтинга в интернет-магазине.
13978
+5
PHP массив в файл CSV
Пример как преобразовать массив в CSV и сохранить его диске или отдать на скачивание.
9068
+1
Формирование файла sitemap.xml
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
17249
+4
Поиск похожих текстов в базе данных MySQL + PHP
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
4029
+3
Примеры использования PDO MySQL
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
79557
+2
Постраничный вывод и базы данных
В SQL запросах, для ограничения количества строк в результате используется инструкция LIMIT, например следующий вернёт...
9738
+2