使用PDO将XML文件导入mySQL

时间:2016-08-12 09:09:43

标签: mysql xml pdo import

我需要将XML文件导入MySQL数据库。 我已经得到了一个代码 - 但它已经有几年了,并且不使用PDO而且我现在还没有在PHP7和MySQL 5.5的新服务器上运行它。

如果有人可以帮助我找到有效的解决方案,那将是非常好的。

我的XML文件:

<amateures>
  <amateur>
    <id>
    <login>
    <figur>
    <vote_rating>
    <haarfarbe>
    <gewicht>
    <groesse>
    <plz>
    <sternzeichen>
    <vorlieben>
    <vorlieben_en>
    <uebermich>
    <uebermich_en>
    <geschlecht>
    <staat>
    <gebtag>
    <regdate>
    <urls>
      <profil>
      <register>
    </urls>
    <images>
      <overview>
      <overview_fsk16>
      <overview_big>
      <overview_fsk16_big>
    </images>
    <videos>
      <video>
        <title>
        <title_en>
        <beschreibung>
        <beschreibung_en>
        <playtime>
        <id>
        <img_fsk16>
        <img>
        <imgani>
        <videourl>
        <category>
        <category>
        <category>
      </video>
    </videos>
  </amateur>

  <amateur>
  [...]
  </amateur>
</amateures>

我需要3个表中的数据:

我需要表格“amateure”:

  <amateur>
    <id>
    <login>
    <figur>
    <vote_rating>
    <haarfarbe>
    <gewicht>
    <groesse>
    <plz>
    <sternzeichen>
    <vorlieben>
    <vorlieben_en>
    <uebermich>
    <uebermich_en>
    <geschlecht>
    <staat>
    <gebtag>
    <regdate>
    <urls>
      <profil>
      <register>
    </urls>
    <images>
      <overview>
      <overview_fsk16>
      <overview_big>
      <overview_fsk16_big>
    </images>
  </amateur>

表“amateur_vid”应包含:

<videos>
  <video>
    <title>
    <title_en>
    <beschreibung>
    <beschreibung_en>
    <playtime>
    <id>
    <img_fsk16>
    <img>
    <imgani>
    <videourl>
  </video>
</videos>

表“amateur_cat”应包含:

<category>

来自section的字段“id”必须添加到表“amateur_vid”,并且来自section的字段“id”必须添加到表“amateur_cat”。

这是我的代码 - 在这种情况下,只会导入一个类别。我不知道如何在节点上进行循环:

    #!/usr/bin/php -n
<?php
function OpenDB () {
  $connect = mysqli_connect('localhost','#','#');
  if(!$connect)
    die ("Connection to SQL-Server failed!");
  $database = mysqli_select_db($connect, "DATABASE");
  if(!$database)
    die ("Selection of Database failed!");
  return $connect;
}
$connect = OpenDB();

$count = 0;
$countnew = 0;
$countvid = 0;
$starttime = time();

$xml = simplexml_load_file("FILE.xml");

$query = "update amateur set deleted = 1";
mysqli_query($connect, $query);

$query = "delete from amateur_vid";
$res = mysqli_query($connect, $query);

foreach ($xml->amateur as $amateur) {
  $count++;
  $amateur_id                 = $amateur->id;
  $amateur_login              = utf8_decode($amateur->login);
  $amateur_figur              = $amateur->figur;
  $amateur_vote_rating        = $amateur->vote_rating;
  $amateur_haarfarbe          = $amateur->haarfarbe;
  $amateur_gewicht            = $amateur->gewicht;
  $amateur_groesse            = $amateur->groesse;
  $amateur_plz                = $amateur->plz;
  $amateur_sternzeichen       = $amateur->sternzeichen;
  $amateur_vorlieben          = $amateur->vorlieben;
  $amateur_vorlieben_en       = $amateur->vorlieben_en;
  $amateur_uebermich          = $amateur->uebermich;
  $amateur_uebermich_en       = $amateur->uebermich_en;
  $amateur_geschlecht         = $amateur->geschlecht;
  $amateur_staat              = $amateur->staat;
  $amateur_gebtag             = $amateur->gebtag;
  $amateur_regdate            = $amateur->regdate;

  foreach ($amateur->urls as $url) {
    $amateur_profil             = $url->profil;
    $amateur_register           = $url->register;
  }

  foreach ($amateur->images as $image) {
    $amateur_overview           = $image->overview;
    $amateur_overview_fsk16     = $image->overview_fsk16;
    $amateur_overview_big       = $image->overview_big;
    $amateur_overview_fsk16_big = $image->overview_fsk16_big;
  }

  $amateur_vorlieben          = mysqli_escape_string($connect, $amateur_vorlieben);
  $amateur_vorlieben_en       = mysqli_escape_string($connect, $amateur_vorlieben_en);
  $amateur_uebermich          = mysqli_escape_string($connect, $amateur_uebermich);
  $amateur_uebermich_en       = mysqli_escape_string($connect, $amateur_uebermich_en);

  $query = "select * from amateur where amateur_id = $amateur_id";
  $res = mysqli_query($connect, $query);

  if(mysqli_num_rows($res) == 0) {
    $countnew++;
    $query = "insert into amateur (amateur_id, amateur_login, amateur_figur, amateur_vote_rating, amateur_haarfarbe, amateur_gewicht, amateur_groesse, amateur_plz, amateur_sternzeichen, amateur_vorlieben, amateur_vorlieben_en, amateur_uebermich, amateur_uebermich_en, amateur_geschlecht, amateur_staat, amateur_gebtag, amateur_regdate, amateur_profil, amateur_register, amateur_overview, amateur_overview_fsk16, amateur_overview_big, amateur_overview_fsk16_big) values ($amateur_id, '$amateur_login', '$amateur_figur', '$amateur_vote_rating', '$amateur_haarfarbe', '$amateur_gewicht', '$amateur_groesse', '$amateur_plz', '$amateur_sternzeichen', '$amateur_vorlieben', '$amateur_vorlieben_en', '$amateur_uebermich', '$amateur_uebermich_en', '$amateur_geschlecht', '$amateur_staat', '$amateur_gebtag', '$amateur_regdate', '$amateur_profil', '$amateur_register', '$amateur_overview', '$amateur_overview_fsk16', '$amateur_overview_big', '$amateur_overview_fsk16_big')";
    $res = mysqli_query($connect, $query);
  } else {
    $query = "update amateur set amateur_login='$amateur_login', amateur_figur='$amateur_figur', amateur_vote_rating='$amateur_vote_rating', amateur_haarfarbe='$amateur_haarfarbe', amateur_gewicht='$amateur_gewicht', amateur_groesse='$amateur_groesse', amateur_plz='$amateur_plz', amateur_sternzeichen='$amateur_sternzeichen', amateur_vorlieben='$amateur_vorlieben', amateur_vorlieben_en='$amateur_vorlieben_en', amateur_uebermich='$amateur_uebermich', amateur_uebermich_en='$amateur_uebermich_en', amateur_geschlecht='$amateur_geschlecht', amateur_staat='$amateur_staat', amateur_gebtag='$amateur_gebtag', amateur_regdate='$amateur_regdate', amateur_profil='$amateur_profil', amateur_register='$amateur_register', amateur_overview='$amateur_overview', amateur_overview_fsk16='$amateur_overview_fsk16', amateur_overview_big='$amateur_overview_big', amateur_overview_fsk16_big='$amateur_overview_fsk16_big', deleted=0 where amateur_id = $amateur_id";
    $res = mysqli_query($connect, $query);
    if(!$res)
      die($query);
  }

  foreach ($amateur->videos as $videos) {
    foreach ($videos->video as $video) {
      $vids_title         = $video->title;
      $vids_title_en      = $video->title_en;
      $vids_beschreibung  = $video->beschreibung;
      $vids_beschreibung_en = $video->beschreibung_en;
      $vids_playtime        = $video->playtime;
      $vids_id              = $video->id;
      $vids_img_fsk16       = $video->img_fsk16;
      $vids_img             = $video->img;
      $vids_imgani          = $video->imgani;
      $vids_videourl        = $video->videourl;
      $vids_category        = $video->category;

      $query = "insert into amateur_vid (amateur_id, vids_title, vids_title_en, vids_beschreibung, vids_beschreibung_en, vids_playtime, vids_id, vids_img_fsk16, vids_img, vids_imgani, vids_videourl, vids_category) values ($amateur_id, '$vids_title', '$vids_title_en', '$vids_beschreibung', '$vids_beschreibung_en', '$vids_playtime', '$vids_id', '$vids_img_fsk16', '$vids_img', '$vids_imgani', '$vids_videourl', '$vids_category')";
      $res = mysqli_query($connect, $query);
      $setid = mysqli_insert_id($connect);
      $countvid++;
    }
  }

}

$query = "delete from amateur where deleted = 1";
mysqli_query($connect, $query);
?>

如果有人可以帮我解决我的问题,我会非常高兴。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我可以改变我的旧剧本,它现在正在工作。

我唯一没有工作的是<categories>部分。

我需要在单独的表格中使用类别 - 或者,将分类的逗号分隔到一个字段中。

有人有解决方案吗?