Импорт информации из xml в mysql с помощью php + mysqli в цикле

Last update: 22 Квітня, 2023

Category: SQL code examples

<?php
/* отключаем выполнение файла (цель - исключить вероятность того, что он выполнится раньше времени и запорет БД) */
die;

/* обнуляем все переменные */
$date = ''; 
$index = '';
$name = '';
$title = '';
$image = '';

/* подключаемся к БД */
$mi=new mysqli("HOST", "USER", "PASS", "DB_NAME");
$mi->set_charset("utf8");
if($mi->connect_errno):
die($mi->connect_error);
endif;

/* указываем адрес + название используемого файла (если он в корне - просто название) */
$xml = simplexml_load_file('xml_file_name.xml');

/* указываем количество обрабатываемых значений из файла xml */
// указываем определенное количество
$num = 46;
// еще вариант - вынуть все данные из xml-файла: $num = count ($xml->NAME_STR); где NAME_STR - название блока данных

/* запускаем цикл */

for ($i = 0; $i < $num; $i++)
{
/* По умолчанию указанный ниже код будет дописывать в БД строчку с ID на 1 больше от последней записанной если мы хотим указать номера строк самостоятельно - вписываем свое значение вместо цифры 400: именно с этой цифры и начнется публикация. Помните, что если в указанных строках уже есть информация - новые данные будут перезаписаны поверху. */
$id = $i+400;
/* перед считыванием данных из xml - обнуляем переменные */
$date = ''; $index = ''; $name = ''; $title = ''; $image = '';
/* помещаем в переменные значения полей из xml файла */
$se = $xml->NAME_STR[$i]->{'title'};
$en = $xml->NAME_STR[$i]->{'info'}->{'date'};
$ru = $xml->NAME_STR[$i]->{'info'}->{'name'};
$no = $xml->NAME_STR[$i]->{'files'}->{'index'};
$image = $xml->NAME_STR[$i]->{'images'}->{'image'}[3]->{'url'}; // вынимаем URL 4-й фотографии

/* добавляем новую строчку в БД */
$mi->query("insert into `DB_NAME` set `id`='$id', `date`='$date', `index`='$index', `name`='$name', `title`='$title', `image`='$image'");

/* выводим добавляемую в БД информацию на экран: */
echo 'date = '.$date.'<br/>';
echo 'index = '.$index.'<br/>';
echo 'name = '.$name.'<br/>';
echo 'title = '.$title.'<br/>';
echo 'image = '.$image.'<br/><br/>';
}