2016-08-12 22 views
0

Ich muss eine XML-Datei in eine MySQL-Datenbank importieren. Ich habe bereits einen Code - aber es ist ein paar Jahre alt und nicht PDO verwenden und ich habe es nicht funktioniert jetzt auf einem neuen Server mit PHP7 und MySQL 5.5.XML-Datei mit PDO in mySQL importieren

Wäre sehr nett, wenn mir jemand mit einer funktionierenden Lösung helfen könnte.

Meine XML-Datei:

<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> 

Ich brauche die Daten in drei Tabellen:

Daten Linien I für Tabelle "amateure" brauchen:

<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> 

Tabelle "amateur_vid" sollte enthalten :

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

und die Tabelle „amateur_cat“ sollte enthalten:

<category> 

Das Feld „id“ von Abschnitt zu Tisch „amateur_vid“ add sein muss und das Feld „id“ aus dem Abschnitt der Tabelle „amateur_cat“ hinzufügen müssen.

Das ist mein Code - in diesem Fall wird nur eine Kategorie importiert. Ich weiß nicht, wie eine Schleife über die Knoten zu tun:

#!/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); 
?> 

Ich würde wirklich glücklich sein, wenn mir jemand mit einer funktionierenden Code-Snippet für mein Problem helfen könnte.

Vielen Dank im Voraus.

Bee

+0

Sie haben einen Code? Veröffentliche es! SO ist kein Codewriting-Service – lokusking

+0

Ich habe den Code jetzt hinzugefügt. – bee

Antwort

0

Ich konnte mein altes Skript ändern und es funktioniert jetzt.

Das einzige, was ich nicht funktionierte, ist der <categories> Abschnitt.

Ich brauche die Kategorien in einer separaten Tabelle - oder, fügen Sie die Kategorien Komma getrennt in ein Feld.

Jemand hat eine Lösung dafür?