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

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

1

Чтение стандартного 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
2

XML файл из 1С

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, обновлено 31.08.2019 1010

Поделится

Темы

PHP XML БД

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

В продолжении статьи о верстки рейтинга, рассмотрим PHP-скрипты системы отзывов и рейтинга в интернет-магазине.
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание...
В MySQL есть несколько встроенных функций шифрования. Рассмотрим основные на примерах c использованием PHP PDO.
Если требуется сделать импорт или обновление товаров по XML файлу Яндекс Маркета, можно применить расширении PHP...