Ankündigung

Einklappen
Keine Ankündigung bisher.

csv Datei einlesen und dann in mysql importieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • csv Datei einlesen und dann in mysql importieren

    Hallo,

    ich versuche seit einer Woche per php eine csv in mysql zu importieren - phpmyadmin hat dabei nie funktioniert - immer war irgendwas und musste händisch an der Tabelle nachgearbeitet werden.

    Aus den Recherchen habe ich bisher folgendes Script - das auslesen funktioniert auch aber irgendwie klappt der Import nicht:

    Fehlermeldung:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

    Aber die Parameter sind richtig - auch die DB existiert - alles copy and paste! Nur komme ich nicht auf den Fehler!?

    PHP-Code:
    <?php

    $fp 
    fopen("test.csv""r");

    $zeilen = array();
    while( !
    feof($fp) ) {
      
    $zeilen[] = fgetcsv  $fp  4096 ";");
      }

    //Datenbankverbindung besteht
    define("Shop"0);
    define("ProductId"1);
    define("ProgramId"2);
    define("MerchantProductNumber"3);
    define("ProductName"4);
    define("ProductPrice"5);
    define("ProductLongDescription"6);
    define("Status"7);
    define("MerchantProductCategory"8);
    define("ZanoxProductCategory"9);
    define("ImageSmallURL"10);
    define("ImageMediumURL"11);
    define("ProductManufacturerBrand"12);
    define("ZanoxProductLink"13);
    define("ZanoxProductCategoryNumber"14);
    define("MerchantProductCategoryNumber"15);
    define("DeliveryTime"16);
    define("TermsOfContract"17);
    define("ProductEAN"18);


    include(
    '../inc/mysql.inc.php');
    $db mysql_connect($sql['host'],$sql['uid'],$sql['psw']);
    mysql_select_db($sql['db'], $db);

    $query "INSERT INTO dtg_shop (Shop, ProductId, ProgramId, MerchantProductNumber, ProductName, ProductPrice,
                 ProductLongDescription, Status, MerchantProductCategory, ZanoxProductCategory, ImageSmallURL, ImageMediumURL,
                 ProductManufacturerBrand, ZanoxProductLink, ZanoxProductCategoryNumber, MerchantProductCategoryNumber,
                 DeliveryTime, TermsOfContract, ProductEAN) VALUES "
    ;


    while( !
    feof($fp) ) {
      
    $zeile fgetcsv  $fp  4096 ";"  );
      
      
    $query $query ."( '".$zeile[Shop]."', '".$zeile[ProductId]."', '".$zeile[ProgramId]."', '".$zeile[MerchantProductNumber]."', '".$zeile[ProductName]."', '".$zeile[ProductPrice]."', '".$zeile[ProductLongDescription]."', '".$zeile[Status]."', '".$zeile[MerchantProductCategory]."', '".$zeile[ZanoxProductCategory]."', '".$zeile[ImageSmallURL]."', '".$zeile[ImageMediumURL]."', '".$zeile[ProductManufacturerBrand]."', '".$zeile[ZanoxProductLink]."', '".$zeile[ZanoxProductCategoryNumber]."', '".$zeile[MerchantProductCategoryNumber]."', '".$zeile[DeliveryTime]."', '".$zeile[TermsOfContract]."', '".$zeile[ProductEAN]."')";}
      
    echo 
    $query;

      
    $query substr($query0, -1);mysql_unbuffered_query($query) or die(mysql_error());


    ?>

  • #2
    Der Code sieht mittlerweile wie folgt aus:

    PHP-Code:
    $fp fopen("test.csv""r");

    $zeilen = array();
    while( !
    feof($fp) ) {
      
    $zeilen[] = fgetcsv  $fp  4096 ";");
      }

    //Datenbankverbindung besteht
    define("Shop"0);
    define("ProductId"1);
    define("ProgramId"2);
    define("MerchantProductNumber"3);
    define("ProductName"4);
    define("ProductPrice"5);
    define("ProductLongDescription"6);
    define("Status"7);
    define("MerchantProductCategory"8);
    define("ZanoxProductCategory"9);
    define("ImageSmallURL"10);
    define("ImageMediumURL"11);
    define("ProductManufacturerBrand"12);
    define("ZanoxProductLink"13);
    define("ZanoxProductCategoryNumber"14);
    define("MerchantProductCategoryNumber"15);
    define("DeliveryTime"16);
    define("TermsOfContract"17);
    define("ProductEAN"18);


    include(
    '../inc/mysql.inc.php');
    $db mysql_connect($sql['host'],$sql['uid'],$sql['psw']);
    mysql_select_db($sql['db'], $db);


    $query "INSERT INTO dtg_shop (Shop,
                                    ProductId,
                                    ProgramId,
                                    MerchantProductNumber,
                                    ProductName,
                                    ProductPrice,
                                    ProductLongDescription,
                                    Status,
                                    MerchantProductCategory,
                                    ZanoxProductCategory,
                                    ImageSmallURL,
                                    ImageMediumURL,
                                    ProductManufacturerBrand,
                                    ZanoxProductLink,
                                    ZanoxProductCategoryNumber,
                                    MerchantProductCategoryNumber,
                                    DeliveryTime,
                                    TermsOfContract,
                                    ProductEAN)
                            VALUES  "
    ;
                            
    while( 
    feof($fp) ) {
      
    $zeile fgetcsv  $fp  4096 ";"  );
                       
    $query $query ." ('"$zeile[Shop] ."',
                                    '"
    $zeile[ProductId] ."',
                                    '"
    $zeile[ProgramId] ."',
                                    '"
    $zeile[MerchantProductNumber] ."',
                                    '"
    $zeile[ProductName] ."',
                                    '"
    $zeile[ProductPrice] ."',
                                    '"
    $zeile[ProductLongDescription] ."',
                                    '"
    $zeile[Status] ."',
                                    '"
    $zeile[MerchantProductCategory] ."',
                                    '"
    $zeile[ZanoxProductCategory] ."',
                                    '"
    $zeile[ImageSmallURL] ."',
                                    '"
    $zeile[ImageMediumURL] ."',
                                    '"
    $zeile[ProductManufacturerBrand] ."',
                                    '"
    $zeile[ZanoxProductLink] ."',
                                    '"
    $zeile[ZanoxProductCategoryNumber] ."',
                                    '"
    $zeile[MerchantProductCategoryNumber] ."',
                                    '"
    $zeile[DeliveryTime] ."',
                                    '"
    $zeile[TermsOfContract] ."',
                                    '"
    $zeile[ProductEAN] ."')";}

    $query substr($query0, -1);
    mysql_unbuffered_query($query); 
    Keine einzige Datei importiert und Fehlermeldung:

    Fatal error: Maximum execution time of 60 seconds exceeded in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/Import/import.php on line 64

    Kommentar


    • #3
      Deine zweite Schleife wird nie beendet, Nach der ersten Schleife bist du am Ende der CSV-Datei angekommen. Die zweite Schleife wird dann so lange wiederholt, so lange du immer noch am Ende der CSV-Datei bist.

      Übrigens: LOAD DATA INFILE
      Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

      Kommentar


      • #4
        Zitat von mimomamu Beitrag anzeigen
        Deine zweite Schleife wird nie beendet, Nach der ersten Schleife bist du am Ende der CSV-Datei angekommen. Die zweite Schleife wird dann so lange wiederholt, so lange du immer noch am Ende der CSV-Datei bist.

        Übrigens: LOAD DATA INFILE

        Mein Script sieht mittlerweile so aus:

        PHP-Code:
        include('../inc/mysql.inc.php');
        $db mysql_connect($sql['host'],$sql['uid'],$sql['psw']) or die ("Keine Verbindung zu der Datenbank möglich.");
        mysql_select_db($sql['db'], $db);

        $fp fopen("test.csv""r");

        //Datenbankverbindung besteht

        define("Shop"0);
        define("ProductId"1);
        define("ProgramId"2);
        define("MerchantProductNumber"3);
        define("ProductName"4);
        define("ProductPrice"5);
        define("ProductLongDescription"6);
        define("Status"7);
        define("MerchantProductCategory"8);
        define("ZanoxProductCategory"9);
        define("ImageSmallURL"10);
        define("ImageMediumURL"11);
        define("ProductManufacturerBrand"12);
        define("ZanoxProductLink"13);
        define("ZanoxProductCategoryNumber"14);
        define("MerchantProductCategoryNumber"15);
        define("DeliveryTime"16);
        define("TermsOfContract"17);
        define("ProductEAN"18);

        $query "INSERT INTO dtg_shop VALUES ";
        while( !
        feof($fp) ) {
          
        $zeile fgetcsv  $fp  4096 ";"  );
          
        $query .= " ('".$zeile[Shop]."',
                        "
        .$zeile[ProductId].",
                        "
        .$zeile[ProgramId].",
                        "
        .$zeile[MerchantProductNumber].",
                        '"
        .$zeile[ProductName]."',
                        '"
        .$zeile[ProductPrice]."',
                        '"
        .$zeile[ProductLongDescription]."',
                         "
        .$zeile[Status].",
                        '"
        .$zeile[MerchantProductCategory]."',
                        '"
        .$zeile[ZanoxProductCategory]."',
                        '"
        .$zeile[ImageSmallURL]."',
                        '"
        .$zeile[ImageMediumURL]."',
                        '"
        .$zeile[ProductManufacturerBrand]."',
                        '"
        .$zeile[ZanoxProductLink]."',
                         "
        .$zeile[ZanoxProductCategoryNumber].",
                         "
        .$zeile[MerchantProductCategoryNumber].",
                        '"
        .$zeile[DeliveryTime]."',
                        '"
        .$zeile[TermsOfContract]."',
                        '"
        .$zeile[ProductEAN]."' ),";
          }

        $query substr($query0, -1);
        mysql_unbuffered_query($query);

        echo 
        var_dump($query); 
        FEHLERMELDUNG:

        Notice: Undefined offset: 14 in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/Import/import2.php on line 47
        Notice: Undefined offset: 15 in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/Import/import2.php on line 48
        Notice: Undefined offset: 16 in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/Import/import2.php on line 49
        Notice: Undefined offset: 17 in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/Import/import2.php on line 50
        Notice: Undefined offset: 18 in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/Import/import2.php on line 51

        Sind jeweils die letzten 5 defines und Imports - aber eigentlich hab ich die doch definiert oder nicht?

        Kommentar


        • #5
          Definiert hast du sie, aber die gibt es wohl schlicht nicht in der CSV Datei. Und daher gibt es sie auch nicht in $zeile. Und genau das möchten dir die Fehlermeldungen sagen.

          Kommentar


          • #6
            Zitat von mquadrat Beitrag anzeigen
            Definiert hast du sie, aber die gibt es wohl schlicht nicht in der CSV Datei. Und daher gibt es sie auch nicht in $zeile. Und genau das möchten dir die Fehlermeldungen sagen.
            Ja die sind leer - allerdings sind vorher auch schon welche leer?! Warum wird da keine Fehlermeldung angezeigt UND kann ich bei define() auch sagen, dass wenn die Zelle leer ist er keine Fehlermeldung geben soll?!

            Kommentar


            • #7
              also er importiert tatsächlich trotz fehlermeldung - allerdings verstehe ich zwei dinge nicht:

              1. Warum werden nur 450 von 502 Zeilen importiert?!

              2. Habe ich eine Id in den Zeilen enthalten (1. Zeile 4464452535, 2. Zeile 4464452536, etc [allerdings nicht fortlaufend sondern mit Lücken]) Da wird allerdings immer die selbe Nummer importiert 2147483647 ?!?! Ich sehe da auch keinerlei Zusammenhang. Es ist ein Int mit einer Länge von 20 - also sollte es daran auch nicht liegen?!

              Kann mir jemand weiterhelfen - ich will dieses Problem nach einer Woche endlich lösen!!!

              Kommentar


              • #8
                Naja, Fehlermeldung ist in dem Zusammenhang ja auch nicht ganz korrekt. Es handelt sich um einen Notice also um einen Hinweis.

                Enthält denn die Query alle 502 Zeilen?

                Beim ID Feld gilt das gleiche: Wie schaut deine Query am Ende aus? Stehen da noch die unterschiedlichen Werte drin?

                Kommentar


                • #9
                  Zitat von mquadrat Beitrag anzeigen
                  Naja, Fehlermeldung ist in dem Zusammenhang ja auch nicht ganz korrekt. Es handelt sich um einen Notice also um einen Hinweis.

                  Enthält denn die Query alle 502 Zeilen?

                  Beim ID Feld gilt das gleiche: Wie schaut deine Query am Ende aus? Stehen da noch die unterschiedlichen Werte drin?
                  Der Import der gesamten Zeit liegt mit 99% am Zeitlimit von mysql zum Import - da werde ich mit Sicherheit eine Lösung in den einstellungen von mysql finden - einfach zeitlimit hoch und schon sollte es gehen - ich habe nämlich bei jedem Import immer verschiedene anzahlen von leads importiert - Ladezeiten sind eben anders je nachdem was ich während des IMports noch am Rechner mache.

                  Nur im sicher zu gehen - das ID Feld ist kein primarykey und dementsprechend auch nicht autoincrement.
                  Was du mit wie schaut er am Ende aus meinst weiß ich nicht genau aber wenn ich mir den $query ausgeben lasse, dann kommen die korrekten Zahlen die angegeben werden sollen! Bsp:

                  (xxx, '4464453307', 5451, 833380, 'Fußball-Stutzen', '5.99', '', 1, 'Sport & Outdoor | Fußball', '', 'http://zoom.walz.de/fsicache/erezplain?tmp=p100x', '', '', '', '', '', '', '', '' )

                  Zweite array ist die korrekte Zahl und auch bei jeder Zeile verschieden -> importieren tut er allerdings immer 2147483647...die anderen Zahlen aus meinem Beispiel importiert er allerdings immer richtig?!

                  Kommentar

                  Lädt...
                  X