Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] LOAD DATA INFILE funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] LOAD DATA INFILE funktioniert nicht

    Hi,

    ich will eine csv-Datei mit LOAD DATA INFILE in meine MySQL-Datenbank importieren. Nachdem ich mich durch die Doku gelesen und ein bisschen probiert habe, komme ich nicht weiter. Mein Query sieht wie folgt aus:

    PHP-Code:
    $sql "
        LOAD DATA INFILE
            '/www/htdocs/test.csv'
        INTO TABLE
            test
        FIELDS
            TERMINATED BY
                ';'
            ENCLOSED BY
                ''
            ESCAPED BY
                ''
        LINES
            TERMINATED BY
                '\r\n'
            STARTING BY
                ''
    "

    Die csv-Datei habe ich mit Excel erstellt und sie enthält drei Spalten und zwei Zeilen:
    Code:
    eins;zwei;drei
    vier;fuenf;sechs
    Sende ich jetzt den Query, bekomme ich nur false zurück. Woran kann das liegen? Die csv-Datei liegt auf dem Server und kann von allen gelesen werden.

    Gruß, Heimchen

  • #2
    Zitat von Heimchen Beitrag anzeigen
    Sende ich jetzt den Query, bekomme ich nur false zurück. Woran kann das liegen?
    Daran, dass das der definierte Rückgabewert von mysql_query ist, wenn die Datenbank das Statement nicht fehlerfrei ausführen konnte.

    Also frage bei der Datenbank nach, was der Fehler war.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Dass ein false auf einen Fehler deutet, war mir schon klar. Meine Frage galt eigentlich der Ursache des Fehlers. Danach hab ich bisher wohl an der falschen Stelle gesucht. Wie auch immer, der Fehlercode (errno) sowie der Fehlertext (error) sind wie folgt:
      Code:
      1064
      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 '' STARTING BY ''' at line 12
      Aber ich sehe da keinen Fehler.

      Kommentar


      • #4
        ...aber SQL sagt Dir, dass deine Syntax nicht stimmt. Stimmen Tabellennamen (usw.)? Die Fehlermeldung besagt ja sogar, wo ungefähr!

        Wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Zitat von Heimchen Beitrag anzeigen
          Dass ein false auf einen Fehler deutet, war mir schon klar. Meine Frage galt eigentlich der Ursache des Fehlers.
          Dann verstehe ich nicht, warum du so fragst, als ob dir das eben nicht klar sei ...


          Die Meldung scheint sich auf die Zeile nach ESCAPED BY zu beziehen.
          Frage - wieso gibst du diese Klausel überhaupt an, wenn du kein Escape-Zeichen angeben willst?
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            Ok, streiche ich das ESCAPED BY, bin ich den Fehler los. Allerdings bekomme ich jetzt ein "Acces denied":
            Code:
            Access denied for user: 'db1008a@localhost' (Using password: NO)
            Wenn ich allerdings den Query-String gegen ein INSERT austausche, funktioniert es einwandfrei. Wie kann das sein?
            Und warum steht da kein Passwort. Ich öffne die Datenbank definitiv korrekt mit einem Passwort! Wie gesagt, das INSERT funktioniert.

            Oder ist damit der Zugriff auf die Datei gemeint? *am-kopf-kratz*

            Kommentar


            • #7
              Zitat von Heimchen Beitrag anzeigen
              Und warum steht da kein Passwort.
              Du nimmst nicht wirklich an, dass wir das erkennen könnten, wenn du uns ausschliesslich die Wertzuweisung an eine PHP-Variable zeigst ...?
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Ok, hier also mein PHP-Code:
                PHP-Code:
                <?php
                                
                    
                // Open database
                    
                $MySqlDb = @new mysqli('localhost''db1008a''123456''db1008a');
                    
                    
                var_dump($MySqlDb);
                            
                    
                // SQL query
                    
                $sql "
                        LOAD DATA INFILE
                            '/www/htdocs/test.csv'
                        INTO TABLE
                            test
                        FIELDS
                            TERMINATED BY
                                ';'
                            ENCLOSED BY
                                ''
                        LINES
                            STARTING BY
                                ''
                            TERMINATED BY
                                '\r\n'
                    "
                ;
                                
                    
                $SqlResult $MySqlDb->query($sql);
                                
                    
                var_dump($SqlResult);
                    
                var_dump($MySqlDb->errno);
                    
                var_dump($MySqlDb->error);
                    
                    
                $MySqlDb->close();
                                
                    
                // Open database
                    
                $MySqlDb = @new mysqli('localhost''db1008a''123456''db1008a');
                    
                    
                var_dump($MySqlDb);
                            
                    
                // SQL query
                    
                $sql "INSERT INTO test (eins,zwei,drei) VALUES ('1','2','3')";
                                
                    
                $SqlResult $MySqlDb->query($sql);
                                
                    
                var_dump($SqlResult);
                    
                var_dump($MySqlDb->errno);
                    
                var_dump($MySqlDb->error);
                    
                    
                $MySqlDb->close();
                        
                ?>
                Und dies ist die Ausgabe, die dadurch erzeugt wird:
                Code:
                object(mysqli)#1 (17) {
                  ["affected_rows"]=>
                  int(0)
                  ["client_info"]=>
                  string(6) "4.1.22"
                  ["client_version"]=>
                  int(40122)
                  ["connect_errno"]=>
                  int(0)
                  ["connect_error"]=>
                  NULL
                  ["errno"]=>
                  int(0)
                  ["error"]=>
                  string(0) ""
                  ["field_count"]=>
                  int(0)
                  ["host_info"]=>
                  string(25) "Localhost via UNIX socket"
                  ["info"]=>
                  NULL
                  ["insert_id"]=>
                  int(0)
                  ["server_info"]=>
                  string(14) "4.0.23-Max-log"
                  ["server_version"]=>
                  int(40023)
                  ["sqlstate"]=>
                  string(5) "00000"
                  ["protocol_version"]=>
                  int(10)
                  ["thread_id"]=>
                  int(974930)
                  ["warning_count"]=>
                  int(0)
                }
                bool(false)
                int(1045)
                string(65) "Access denied for user: 'db1008a@localhost' (Using password: NO)"
                object(mysqli)#2 (17) {
                  ["affected_rows"]=>
                  int(0)
                  ["client_info"]=>
                  string(6) "4.1.22"
                  ["client_version"]=>
                  int(40122)
                  ["connect_errno"]=>
                  int(0)
                  ["connect_error"]=>
                  NULL
                  ["errno"]=>
                  int(0)
                  ["error"]=>
                  string(0) ""
                  ["field_count"]=>
                  int(0)
                  ["host_info"]=>
                  string(25) "Localhost via UNIX socket"
                  ["info"]=>
                  NULL
                  ["insert_id"]=>
                  int(0)
                  ["server_info"]=>
                  string(14) "4.0.23-Max-log"
                  ["server_version"]=>
                  int(40023)
                  ["sqlstate"]=>
                  string(5) "00000"
                  ["protocol_version"]=>
                  int(10)
                  ["thread_id"]=>
                  int(974931)
                  ["warning_count"]=>
                  int(0)
                }
                bool(true)
                int(0)
                string(0) ""
                Es gibt ja die mysql-Datenbank, in der die Berechtigungen stehen sollen. Jetzt habt ihr ja vielleicht gemerkt, dass die Datenbank hier auf dem Server meines Providers liegt. Kann ich trotzdem mir die Berechtigungen anzeigen lassen? Vielleicht habe ich ja die Berechtigung FILE nicht...

                Kommentar


                • #9
                  Ok, nachdem ich nun einen halben Tag verzweifelt bin, habe ich mich an den Provider gewendet: diese Funktion ist gesperrt. Damit hat sich day erledigt.

                  Kommentar

                  Lädt...
                  X