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

  • Heimchen
    hat ein Thema erstellt [Erledigt] LOAD DATA INFILE funktioniert nicht.

    [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

  • Heimchen
    antwortet
    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.

    Einen Kommentar schreiben:


  • Heimchen
    antwortet
    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...

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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 ...?

    Einen Kommentar schreiben:


  • Heimchen
    antwortet
    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*

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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?

    Einen Kommentar schreiben:


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

    Wolf29

    Einen Kommentar schreiben:


  • Heimchen
    antwortet
    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.

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X