Load Data Infile & csv upload

südpol

Erfahrenes Mitglied
Hi,

hab mir gerade schon die Augen wund gelesen aber die Lösung zu meinem Problem nicht gefunden.

Ich würde gerne eine csv Datei über ein Webformular uploaden und dann via Load data infile in meine Datenbank pusten. Testhalber habe ich das ganze schon mal über das Zeilenweise auslesen der csv Datei und normalen Inserts gemacht - das ist aber nicht wirklich das richtige für mein Tool da sehr große Datenmengen hochgeladen werden...

So sieht mein Query gerade aus:

Code:
// Insert the new Data into the database
    $QUERY_STRING = "LOAD DATA INFILE 
                       '".$FileInfo['tmp_name']."' 
                     INTO TABLE
                       ".$this->WM_FeedTables[$FeedTable]['FeedTable']."
                     FIELDS 
                       TERMINATED BY ','
                     LINES
                       TERMINATED BY '\r\n'
                     "; 
    genLog("import::uploadFile", $QUERY_STRING, DEBUG);
    $recordSet = $this->db->Execute($QUERY_STRING);
    if (!$recordSet) ErrorReport("cimport0200", $this->db->ErrorMsg().$QUERY_STRING, true);

Testhalber habe ich auch schon mal anstatt den Pfad zum File nur ein handle eingetragen - leider mit dem gleichen Resultat:

Code:
1045: Access denied for user: 'root@%' (Using password: YES)

      ADOConnection._Execute(LOAD DATA INFILE 
                       'Resource id #38' 
                     INTO TABLE
                       wm_feed_1
   ..., false) % line  889, file: adodb.inc.php
   ADOConnection.Execute(LOAD DATA INFILE 
                       'Resource id #38' 
                     INTO TABLE
                       wm_feed_1
   ...) % line   73, file: class_import.inc.php

Auf den mysql Seiten habe ich zu load data infile gelesen, dass die Datei im Datenbankverzenichnis liegen muss. Das fände ich nicht wirklich spannend - ist das wirklich so gibt es einen anderen weg die Daten performant in eine Datenbank zu laden? (Am besten so, dass es nicht nur mit mysql sondern auch mit oracle geht :D)

Gruß
 
Hi,

ok der Fehler war wirklich zu einfach als das ich ihn hätte gleich sehen können. Das Statement muß nicht "LOAD DATA INFILE" lauten sondern "LOAD DATA LOCAL INFILE" und schon geht alles wie es soll.

Allerdings habe ich jetzt gleich noch eine weitere Frage in dem Zusammenhang. Ich würde gerne im Query noch die Statements "ENCLOSED BY" und "ESCAPED BY" einsetzen und habe den query deshalb wie folgt aufgebaut:

Code:
$QUERY_STRING = "LOAD DATA LOCAL INFILE 
                       '".$FileInfo['tmp_name']."' 
                     INTO TABLE
                       ".$this->WM_FeedTables[$FeedTable]['FeedTable']."
                     FIELDS TERMINATED BY 
                       ','
                     ENCLOSED BY 
                       '\"' 
                     ESCAPED BY 
                       '\\' 
                     LINES TERMINATED BY 
                       '\r\n'
                     ";

Leider hat mysql hier ein Problem mit dem query und meldet folgendes:
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 ''' at line 11

Schön, aber wie bekomme ich da bitte ein Anführungszeichen oder ein Backslash in den Query rein :confused:

Gruß
 
Zurück