Задать вопрос
@ree4i

Как правильно сохранить в MySQL распарсенный XML?

Есть XML вида:
<Langs>
	<Lang>
		<Cats>
			<Cat>
				<Items>
				...
					<Item ID="56"><Name>Имя 1</Name></Item>
					<Item ID="55"><Name>Имя 2</Name></Item>
				...
				</Items>
			</Cat>
		</Cats>
	</Lang>
</Langs>

Обрабатываю скриптом
<?
header("Content-Type: text/html; charset=utf-8");
  $xml = simplexml_load_file('xml.php');
  foreach ($xml->Langs->Lang->Cats->Cat->Items->Item as $Item) {
    $Item['ID'];  // извлекаем ID
	$ID=$Item['ID'];
	$Name=$Item->Name;
  }

  //Загружаем данные в БД
$user="login";
$password="pass";
$database="baza";
$dtable="table";

if ($db=@mysql_connect("localhost",$user,$password)){
mysql_select_db($database);

echo "База данных найдена!";

  $query = mysql_query("SELECT COUNT(*) FROM $dtable WHERE ID='$ID'") or die(mysql_error());
  $user = mysql_fetch_row($query);
  $total = $user[0];

  if ("$total" == 0) {
    $sql = ("INSERT INTO $dtable (ID,Name) VALUES('$ID','$Name')");
    $result = mysql_query($sql) or die("Error ".mysql_error());
  } else {
    echo 'ID существует!';
  }
}
?>

В итоге в базу сохраняет только последнюю строку (т.е. "55" "Имя 2"). В MySQL практически не разбираюсь, а инет забит решением задач по сохранению запросов из форм, хоть укажите где копать.
  • Вопрос задан
  • 608 просмотров
Подписаться Оценить Комментировать
Решения вопроса 1
@ree4i Автор вопроса
Вопрос решен. вложенность операций неправильная была.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Multigame
$query = mysql_query("SELECT COUNT(*) FROM $dtable WHERE ID='$ID'")
...
 if ("$total" == 0)

Вы уверены в своем коде?

Распарсенный xml нативно хранить в поле mysql нельзя, посмотрите в сторону postgresql.
Но судя по качеству вашего кода, для Ваших задач вполне сойдет (un)serialize функция. (это php). Функция преобразует php объект(массив, переменную) в строку особого формата. Таким образом в базе строка хранится. Аналогично можно хранить через json_en(de)code.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы