 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
29.12.2004, 23:51
|
#1
|
|
TP-Insider
Registriert seit: Feb 2004
Ort: zinnwald / osterzgebirge
|
[MySQL] LOAD DATA LOCAL INFILE
mahlzeit gemeinde,
ich hab da ein problem / verständnisfrage zu "LOAD DATA LOCAL INFILE".
wenn ich per obigem befehl eine lokal bei mir auf dem rechner vorhandene csv-datei in die datenbank einlesen will, kommt bei mir die fehlermeldung, das die datei nicht gefunden wird, obwohl sie lokal bei mir vorhanden ist.
fehlermeldung:
Code:
mySQL ERROR (18): File 'd:/Temp/mappe.csv' not found (Errcode: 2)
mein query:
PHP-Code:
mysql_query("LOAD DATA LOCAL INFILE 'd:/Temp/mappe.csv' REPLACE INTO TABLE tabelle usw.");
füge ich diese datei über ein formular per upload ein, klappt es problemlos.
wo bitte liegt da mein denkfehler?
hintergrund der ganzen geschichte:
ein kunde pflegt seinen veranstaltungskalender über ein offlinetool eines drittanbieters. die daten liegen dort als dbase-datei vor und werden von dem tool per FTP auf den server übertragen. weiterhin ruft das programm eine php-datei auf, die die dbase-daten dann in die mysql-datenbank schreibt.
da das offlinetool nun umgeschrieben wird und einen csv-export bietet, wollte ich mir die FTP-geschichte vom hals schaffen (muß ja nicht jeder das ftp-passwort kennen) und die csv über obige methode einlesen. da die csv-datei ja immer gleich heißt und an der selben stelle auf den lokalen rechner liegt, wollte ich eben einfach diese datei einlesen.
vielleicht gibts ja aber auch ne andere (elegantere) lösung. war nur so ne idee von mir.
gruß
steffen
|
|
|
30.12.2004, 16:02
|
#2
|
|
TP-Supporter
Registriert seit: Apr 2001
|
Hallo
Dies solltest Du Dir einmal durchlesen. Vielleicht unterstützt Deine mySQL-Version LOCAL nicht.
http://dev.mysql.com/doc/mysql/de/LOAD_DATA.html
Es gibt bestimmt ne Menge Alternativen. Ich habe mal hiermit experimentiert. Die Datei wird via upload auf den Server geladen, danach wird das Script ausgeführt. Ist nur ein Beispiel.
PHP-Code:
<?PHP
// Verbindung zur mySQL - Datenbank herstellen
$server = "localhost"; $user = "root"; $pass = "";
$database = "datenbank";
$table ="tabelle";
$verbindung = @mysql_connect($server,$user,$pass)
or die ("Keine Verbindung möglich");
mysql_select_db($database, $verbindung)
or die ("SQL-Fehler = ".mysql_error());
$csvFile = "box.csv";
$csvData = file($csvFile);
foreach($csvData as $v){
$csvRowData = explode(";",$v);
$query = "insert into $table Values
('".$csvRowData[0]."',
'".$csvRowData[1]."',
'".$csvRowData[2]."',
'".$csvRowData[3]."')";
mysql_query($query);
}
?>
__________________
Liebe Grüße, die Judi!
|
|
|
31.12.2004, 17:27
|
#3
|
|
TP-Insider
Registriert seit: Feb 2004
Ort: zinnwald / osterzgebirge
|
hallo judi,
danke für das beispiel. aber ein upload mit formular und danach das einlesen in die db funktioniert ja. nur das direkte einlesen eines lokalen files klappt nicht.
meine mysql-version ist 3.23.56 - sollte das also unterstützen.
gruß und guten rutsch ins neue jahr
steffen
|
|
|
02.01.2005, 12:17
|
#4
|
|
TP-Supporter
Registriert seit: Apr 2001
|
Huhu
also bei mir funktioniert das auch nicht. Kann evtl. auch ein Berechtigungsproblem sein. Ich habe da jetzt auch nicht mehr groß mit experimentiert. Und wenn die Profies hier auch keinen Tipp mehr haben ???
Was mir noch aufgefallen ist,
d:/Temp/mappe.csv
eigentlich gehören dort anstellen der backslashes beim lokalen Pfad einfache slashes hinein
d:\Temp\mappe.csv
oder evtl. einen Differenz bei der Groß- und Kleinschreibung.
__________________
Liebe Grüße, die Judi!
|
|
|
04.01.2005, 01:28
|
#5
|
|
TP-Insider
Registriert seit: Feb 2004
Ort: zinnwald / osterzgebirge
|
Zitat:
|
Zitat von Judi
d:/Temp/mappe.csv
|
habs sowohl mit slash, als auch mit backslash versucht (auch mit maskieren). groß-/kleinschreibung ist auch korrekt.
trotzdem danke für deine mühe.
kann denn sonst keiner helfen? *heul*
|
|
|
04.01.2005, 01:56
|
#6
|
|
Guest
Registriert seit: Aug 2002
|
Siehe Dokumentation, Zugriffsrechte sind zu beachten, wenn ich mich nicht irre das file-Feld.
|
|
|
04.01.2005, 02:20
|
#7
|
|
TP-Insider
Registriert seit: Feb 2004
Ort: zinnwald / osterzgebirge
|
mmh, ich hab das so gelesen, das für "LOCAL" keine file-rechte nötig sind.
Zitat:
|
LOCAL ist etwas langsamer, als wenn der Server direkt auf die Dateien zugreifen kann, weil die Inhalte der Datei vom Client-Host auf den Server-Host übertragen werden müssen. Auf der anderen Seite benötigen Sie keine file-Berechtigung, um lokale Dateien zu laden.
|
außerdem meckert er ja nicht rum, das ich nich zugreifen darf, sondern das er die datei nicht findet. wenn ich die gleiche datei per formular uploade findet er sie ja auch. 
|
|
|
04.01.2005, 02:42
|
#8
|
|
Guest
Registriert seit: Aug 2002
|
Hast du es schon mit doppelten " versucht?
|
|
|
04.01.2005, 03:16
|
#9
|
|
TP-Insider
Registriert seit: Feb 2004
Ort: zinnwald / osterzgebirge
|
Zitat:
|
Zitat von Strogij
Hast du es schon mit doppelten " versucht?
|
ich hoffe, ich hab das richtig verstanden - habs jetzt mit doublequotes ("), statt singlequotes (') versucht, hat aber außer ner fehlermeldung nix gebracht.
oder sollte ich irgendwo zweimal quoten?
|
|
|
04.01.2005, 03:38
|
#10
|
|
Guest
Registriert seit: Aug 2002
|
Habe jetzt leider keinen MySQL-Server, aber die Google-Suche sagte mir:
Zitat:
|
...die Datei muss auf dem Rechner liegen, auf dem der Datenbankserver abläuft und die Datei muss world-readable sein. Man benötigt file_priv, um dieses Kommando ausführen zu können.
|
Quelle
Bin jetzt auch recht müde, aber versuch's mal mit file_priv.
|
|
|
04.01.2005, 03:59
|
#11
|
|
TP-Insider
Registriert seit: Feb 2004
Ort: zinnwald / osterzgebirge
|
mmh, wenn ich da weiterlese:
Zitat:
|
Seit Version 3.22.6 von MySQL gibt es die Kommandovariante LOAD DATA LOCAL INFILE zum Importieren von Daten im CSV-Format. Dieses Kommando wird auf dem MySQL-Client (also im PHP-Interpreter) ausgeführt. Die Datei muss also auf dem Rechner liegen, auf dem der Client läuft und durch den Client lesbar sein. Man benötigt keine besonderen Privilegien, um dieses Kommando ausführen zu können. Dies ist die empfohlene Variante des Kommandos, falls die zur Verfügung steht.
|
allerdings macht mich jetzt das rot-markierte jetzt (nachdem ich das vorher schon x-mal gelesen hatte) doch stuztig: ist mit client etwa gar nicht mein lokaler rechner, sondern der webserver gemeint? kann aber auch an der frühen stunde liegen - irgendwie hab ich grad ne denkblockade. 
|
|
|
05.01.2005, 10:11
|
#12
|
|
TP-Veteran
Registriert seit: Nov 2002
Ort: bei Stuttgart (Esslingen)
|
hallole,
versuchs doch mal mit relativen pfaden
also zB.
'../Temp/mappe.csv'
relativ selbstverständlich von deinem ausführbaren Script gesehen..
zudem sollte das File eventuell im Webverzeichnis liegen, tut es dieses ?
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:44 Uhr.
|
 |