zeer grote xml in database omzetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs Vos

Matthijs Vos

07/12/2012 16:46:26
Quote Anchor link
Hallo allemaal,

Ik ben bezig om een xml met 9345 record om te zetten in een database. Hiervoor gebruik ik het volgende script":
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?
ini_set('display_errors', 'on');
ini_set('display_errors', '1');
require_once('connection.php');

$feed = simpleXML_load_file("http://p2000.bommel.net/cap2xml.php"); /* feed ophalen */
$mysqli->autocommit(FALSE); /* zorg dat er niet direct word opgeslagen, zodat het syteem sneller word */
foreach ($feed as $feed){
    $capcode = $feed->capcode;
    $disipline = $feed->discipline;
    $korps = $feed->korps;
    $description_load = $feed->omschrijving;
    if(isset($feed->korps)){
        if(empty($feed->korps) === FALSE){
            $description = ''.$korps.' - '.$description_load.'';
        }

        else{
            $description = $description_load;
        }
    }

    else{
        $description = $description_load;
    }


    $check1 = $mysqli->query    ('
                            SELECT *
                            FROM capcodes
                            WHERE capcode = "'
.$capcode.'" AND description = "'.$description.'"
                            '
);
    if($check1 == false){
        echo 'Verbinden met database is mislukt200<br />';
        die();
    }

    if($check1->num_rows == 0){ /* als de beschrijving capcode disipline combinatie niet aanwezig is */
        $check2 = $mysqli->query    ('
                                    SELECT *
                                    FROM capcodes
                                    WHERE capcode = '
.$capcode.'
                                    '
);
        if($check2 == false){
            echo 'Verbinden met databse is mislukt 201<br />';
            die();
        }

        if($check2->num_rows == 0){ /* als de capcode nog niet betsaat, volledig opslaan */
            $save = $mysqli->query('
                                INSERT INTO capcodes
                                (capcode, disipline, description)
                                 VALUES
                                 ("'
.$capcode.'", "'.$disipline.'" , "'.$description.'" )
                                 '
);
            if($save == false){ /* check of opslag mislukt is */
                echo ' Opslaan in database is mislukt<br />';
                die();
            }

            else{
                echo ''.$capcode.' is toegevoegd<br />';
            }
        }

        else{ /* als de capcode bestaat, updaten */
            $save = $mysqli->query("
                                    UPDATE capcodes
                                    SET description = '"
.$description."' AND disipline = '".$disipline."'
                                    WHERE capcode = '"
.$capcode."'
                                     "
);
            if($save == false){
                echo 'Update in database is mislukt<br />';
                die();
            }

            else{
                echo ''.$capcode.' is geupdate<br />';
            }
        }
    }
}

$mysqli->commit(); /* Voer alle db aanpassingen uit */

?>


nu gaat dit een hele tijd goed, maar opgegeven moment word in de description 0 opgeslagen ipv de description. En daarnaast word opgegeven moment (later dan dat de description bug optreed) check 1 niet meer goed uitgevoerd en krijg ik daarop dan ook een FALSE terug.

Iemand enig idee waaraan dat kan liggen?


Toevoeging op 07/12/2012 16:52:42:

EDIT: probleem van de description is opgelost, code's zaten dubbel in de xml. probleem van de check nog niet.
Gewijzigd op 07/12/2012 16:51:31 door Matthijs Vos
 
PHP hulp

PHP hulp

21/11/2024 22:39:49
 
Erwin H

Erwin H

07/12/2012 16:55:42
Quote Anchor link
Voor de vraag, bij welk record in de XML gaat het mis? Maakt het zoeken wat eenvoudiger. Meestal komen dit soort dingen door rare karakters in de tekst.

Dan nog een tip, kijk eens naar INSERT INTO... ON DUPLICATE KEY UPDATE. Daarmee hoef je niet eerst te checken of een record al bestaat en aan de hand daarvan te inserten of te updaten, maar kan je elk record gewoon automatisch laten inserten/updaten. Scheelt je een hoop code en een hoop select queries.
 
Matthijs Vos

Matthijs Vos

07/12/2012 17:08:05
Quote Anchor link
Bedankt ;)
Hij kapt er mee na de capcode '1500983'
 
Erwin H

Erwin H

07/12/2012 17:12:17
Quote Anchor link
Zit ongetwijfeld dan in het feit dat het record ervoor het eerste record is met als korps naam 's-Gravenzande. Zie die apostrofe? Aangezien je de input niet escaped ga je daar last van krijgen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.