csv-Datei auf Server importieren

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

csv-Datei auf Server importieren

Postby wneudeck » 19. November 2013 23:39

Hallo,
eine vielleicht etwas dumm klingende Frage. Ich nutze lokal xampp und importiere dort mit folgender Anweisung eine csv-Datei in die mysql-Datenbank:
Code: Select all
mysql --user=root --password=XXXX wetwin < f:/sql/wswinalledavis.sql

Wobei die Datei wswinalledavis.sql so aufgebaut ist:
Code: Select all
# temporäre Tabelle löschen
delete from csvtmpdavis;
#temporäre Tabelle aus ws_newdata füllen
load data infile 'i:/programme/wswin/ws_newdata.csv'
into table csvtmpdavis
fields terminated by ','
ignore 1 lines;
# in Haupttabelle übertragen
replace into csvdat
(datum, zeit, tempa, feuchtea, druck, rain, windg, windr)
select
concat(right(datum, 4),'-', mid(datum, 4,2), '-', left(datum, 2)), zeit, tempanord, feuchteanord, druck- 45.7, rain, boeen, windr
from csvtmpdavis;


Ist es nun möglich, dies anstatt lokal auch gleich auf dem Webspace auszuführen? Mit anderen Worten: ich lade die Datei ws_newdata.csv (die ja die einzutragenden Daten enthält) auf den Webspace und wie geht es dann weiter? Oder ist das nur mit einem shell-Zugang auf dem Server möglich?
Die Frage resultiert daraus, dass ich bis jetzt insofern etwas umständlich vorgehe: Die Daten werden lokal in die mysql-Datenbank übertragen (s.obiges Beispiel) und dann von dort mit einem weiteren skript aus der lokalen Datenbank in die Datenbank auf dem Webspace übertragen. Und das würde ich gern "vereinfachen", also gleich Übertragung der Daten auf den Webspace
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby Nobbie » 20. November 2013 11:07

Es gäbe mehrere Möglichkeiten, am einfachsten erscheint es mit, wenn Du dieses "SQL-Script" (das nenne ich jetzt mal so) quasi in PHP "umwandelst". Im Prinzip kann man das fast 1:1 umwandeln, denn in einem mysql_select() Aufruf kann man eigentlich jede gültige SQL Anweisung reinschreiben (nicht nur Select ...). Und das PHP Script legst Du auf den Webserver in einen Bereich, den nur Du kennst und führst es aus.

Du musst da nur die Namen für die CSV-Datei anpassen, im Moment sind das ja Windows-Pfadangaben.

Eine andere Möglichkeit wäre, einfach eine PHP Datei mit nur einem Befehl zu schreiben, nämlich quasi:

Code: Select all
system("mysql --user=root --password=XXXX wetwin < f:/sql/wswinalledavis.sql");


wobei auch hier natürlich der Name der CSV Datei angepasst werden muss (und wahrscheinlich auch User und Password für mysql). Wahrscheinlich muss auch der Befehl "mysql" durch den vollen (lokalen) Pfadnamen ersetzt werden. Allerdings wird das nur dann funktionieren, wenn auf Deinem Webspace auch der mysql-Shell-Interpreter installiert ist. Dagegen funktioniert die erstgenannte Variante in jedem Fall.

Last not least kannst Du versuchen, die CVS Datei (und nur diese Datei) mit Hilfe von phpMyAdmin zu importieren, das geht theoretisch auch. Innerhalb von phpMyAdmin kann man auch einzelne SQL Statements ausführen, wobei der Import einen eigenen Dialog hat und ein SQL Statement fertig generiert (aber wenn das nicht passt, kannst Du Dein eigenes Statement nehmen).
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Re: csv-Datei auf Server importieren

Postby wneudeck » 20. November 2013 12:48

Hallo,
danke für die schnelle Antwort. Ich muss mir da mal Möglichkeit 1 und und eventtuell 2 genauer ansehen. Die 3. Variante scheidet insofern aus, als dies ja dann alles automatisiert ablaufen soll.
Das
wenn auf Deinem Webspace auch der mysql-Shell-Interpreter installiert ist.

weiß ich allerdings nicht, ist aber zu erfragen.
Wenn ich bei den erstgenannten Lösungen Probleme habe (kann bei mir leicht sein, meine Kenntnisse sind noicht so tiefgreifend), melde ich michh hier nochmals.
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby Nobbie » 20. November 2013 13:11

Es gäbe natürlich eine ganz pfiffige Lösung - Du könntest auf dem Heimrechner mit Xampp die Tabelle csvdat als "Federated" deklarieren und die Zugriffsdaten für die Webdatenbank angeben. Das funktioniert allerdings auch nur dann, wenn die Webdatenbank nicht nur auf "localhost", sondern auf externe Clients horchen kann.

Aber wenn das geht, dann wird quasi mit dem Ausführen des lokalen Scripts die remote Tabelle csvdat gepflegt (statt die lokale - die gibt es in dem Sinne gar nicht, das ist das Konzept von "Federated"). Allerdings sind (glaube ich) FEDERATED Tabellen in Xampp per Default nicht aktiviert.

Ich habe selbst mit Federated schon rumgespielt, das geht eigentlich ganz gut.

Aber die sicherste Variante ist in jedem Fall die Methode, ein eigenes PHP Script zu schreiben - das könnte man als action="..." in einem Formular angeben, welches dann auch gleich die entsprechende csv-Datei hochlädt. Last not least könnte man auch gleich in PHP die CSV-Datei selbst zeilenweise auseinandernehmen und die entsprechenden Replace Anweisungen generieren. Also nicht einmal einen Import in eine temporäre Tabelle, sondern direkt die Daten der csv-Datei benutzen und damit die Tabelle csvdat akualisieren. Mit PHP kann man das problemlos selbst auseinanderdröseln und zeilenweise einfügen.
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Re: csv-Datei auf Server importieren

Postby wneudeck » 20. November 2013 13:15

Hallo,
wie befürchtet: eine Frage muss ich doch gleich noch nachschieben (für Möglichkeit 1)
Auf dem webspace befindet sich ja dann die von mir genannte Datei "ws_newdata.csv". Wie realisiere ich aber in PHP dann die von mir lokal verwendete Anweisung
"load data infile ...... into table csvtempdavis"
Ich kann doch wahrscheinlich nicht einfach sagen
Code: Select all
$sql= "load data infile 'ws_newdata.csv' into table csvtemp";
mysql_query($sql);

Nachtrag:
Unsere psotings haben sich überschnitten. Mit "federated" kann ich leider gar nichts anfangen, obwohl die von Dir genannte Vorgehensweise ideal klingt. Ich würde mich trotzdem dann mal auf Möglichkeit 1 konzentrieren.
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby Nobbie » 20. November 2013 13:25

wneudeck wrote:Ich kann doch wahrscheinlich nicht einfach sagen
Code: Select all
$sql= "load data infile 'ws_newdata.csv' into table csvtemp";
mysql_query($sql);


Doch. Wieso nicht? Ggf. musst Du aber den Namen der CSV-Datei als ganzen Pfad o.ä. angeben (mit Hilfe der Servervariablen DOCUMENT_ROOT beispielsweise), das hängt davon ab, was das aktuelle Verzeichnis ist, wenn ein PHP Script ausgeführt wird.
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Re: csv-Datei auf Server importieren

Postby wneudeck » 20. November 2013 22:27

Hallo,
danke, dann weiß ich , wie ich ansetzen kann.
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby wneudeck » 21. November 2013 14:10

Hallo,
ich habe nun nur zum Test mal folgenden Code verwendet (Habe in der Pfadangabe serverbezogene Werte durch ungültige Werte ersetzt)
Code: Select all
<?php
include "open.php"; //Verbindung zur Datenbank herstellen
set_time_limit(0);
error_reporting(E_ALL);
$sql= "delete from csvtmpdavis";
mysql_query($sql);
$sql= "load data infile '/www/12345_67890/rp-hosting/50000000/5555/webseiten/donwetter/testordner/ws_newdata.csv' into table csvtempdavis";
mysql_query($sql);
?>

Und nun passiert folgendes:
Die Tabelle wird zunächst wie gewünscht gelöscht (also funktioniert ja offenbar die Verbindung zur Datenbank und die delete-Anweisung), doch es wird der Inhalt der csv-Datei nicht eingetragen.
Es wird aber auch keine Fehlermeldung ausgegeben (sollte doch durch error_reporting(E_ALL) geschehen, oder?), sondern ich sehe einfach eine weiße Seite, wenn ich die Datei test.php aufrufe, die den obigen Code enthält.
Es kommt mir also so vor, als würde die csv-Datei eventuell doch nicht gefunden. Ich habe aber den Pfad der Administrationsseite meines Webspace entnommen, sollte also schon stimmen. Außerdem befindet sich die Datei test.php, die den obigen Code enthält, im gleichen Ordner (testordner) wie die csv-Datei.
Bitte um etwas Nachsicht, wenn das vielleicht jetzt alles sehr stümperhaft rüberkommt, aber ich bin doch schon in einem etwas fortgeschrittenen Alter (69) und befasse mich mit PHP immer nur in sehr großen Zeitabständen.
Nachtrag: Ich habe mir jetzt mit DOCUMENT_ROOT mal den Pfad ausgeben lassen, er lautet genauso, wie oben angegeben, als kann da der Fehler auch nicht liegen.
Last edited by wneudeck on 21. November 2013 14:31, edited 1 time in total.
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby Altrea » 21. November 2013 14:24

wneudeck wrote:Es wird aber auch keine Fehlermeldung ausgegeben (sollte doch durch error_reporting(E_ALL) geschehen, oder?)

Nö.
http://php.net/manual/de/function.mysql-error.php
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 8294
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 10 Pro x64

Re: csv-Datei auf Server importieren

Postby wneudeck » 21. November 2013 15:08

Hallo,
Code: Select all
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";

bringt auch keine Fehlernummer, wobei $link den Hostnamen, Datenbankbenutzer und Datenbankpasswort enthält
Es kommt nur der Doppelpunkt
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby wneudeck » 21. November 2013 19:53

Hallo,
einen Fehler meinerseits habe ich nun schon entdeckt (ich hatte FIELDS TERMINATED BY ',' und ignore 1 lines vergessen, denn die ws_newdata.csv hat in der ersten Zeile Werte, die nicht in die Datenbank sollen), aber es funktioniert dennoch nicht.
Code: Select all
<?php
//echo $_SERVER['DOCUMENT_ROOT'] ;
include "open.php"; //Verbindung zur Datenbank herstellen
set_time_limit(0);
$sql= "delete from csvtmpdavis";
mysql_query($sql);

$sql =  "LOAD DATA INFILE 'ws_newdata.csv'
                   INTO TABLE csvtempdavis
                   FIELDS TERMINATED BY ','
                   ignore 1 lines";

                   echo mysql_error();
mysql_query($sql);

?>

Wo könnte denn hier, rein vom Code her, der Fehler noch stecken? Es nützt auch nichts, wenn ich, wie schon geschehen, den kompletten Serverpfad angebe anstatt nur den Dateinamen. Das Eigenartige ist ja, dass es zu Hause in der lokalen Datenbank einwandfrei funktioniert, halt ohne PHP
Danke für die Geduld.
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby Altrea » 21. November 2013 20:04

Das mysql_error() ist auch an der falschen Stelle. Es gehört in die Abbruchbedingung von mysql_query() oder zumindest dahinter.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 8294
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 10 Pro x64

Re: csv-Datei auf Server importieren

Postby Nobbie » 21. November 2013 20:50

Zum einen sind ja auch noch wilde Fehler drin, zum anderen kann ich nur wiederholt raten, eben NICHT den "LOAD DATA..." in SQL auszuführen (auch wenn das möglich ist und zunächst mal eine Quick&Dirty Lösung ist), sondern wenn Du sowieso schon etwas tiefer einsteigst, dann solltest Du die PHP-Möglichkeiten benutzen und die CSV Datei selbst analysieren und zeilenweise interpretieren.

Das ist nicht nur die bessere Lösung,es übt auch ungemein!
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Re: csv-Datei auf Server importieren

Postby wneudeck » 22. November 2013 19:14

Hallo,
ich kenne nun den Grund, warum es nicht funktioniert, denn ich habe beim Hoster nachgefragt:
Bei ihm liegen Mysql und Apache nicht auf dem gleichen Server. Mit anderen Worten: da scheidet dann load data infile aus.
Sein Vorschlag:
Um CSV-Dateien einzulesen, muss man erst mittels PHP/fgetcsv die Dateien parsen und mit INSERT-Befehlen arbeiten.
Eine andere Möglichkeit wäre die Datei mit exec() und mysqlimport zu importieren.

Ob ich das so nun mache, weiß ich noch nicht, da das bis jetzt von mir verwendete Verfahren (im Eingangsposting genannt) ja problemlos funktioniert. Mich hätte halt der andere Weg interessiert, aber bei den anderen genannten Wegen bauen sich für mich neue Hürden auf.
wneudeck
 
Posts: 95
Joined: 31. July 2006 11:04

Re: csv-Datei auf Server importieren

Postby Nobbie » 22. November 2013 21:33

wneudeck wrote:Sein Vorschlag:


... ist identisch mit meinem Vorschlag (s.o.).

wneudeck wrote:Mich hätte halt der andere Weg interessiert, aber bei den anderen genannten Wegen bauen sich für mich neue Hürden auf.


Das sind dieselben Hürden, die sich jedem(!) ausnahmslos auch aufbauen, wenn sie mit PHP anfangen zu programmieren. Niemand hier hat eine Fee am Bett gehabt, die einem die PHP Programmierung ins Bett gelegt hat...

Also entweder willst Du Dich verbessern und Deine Kenntnisse ausbauen, oder weiterhin lieber andere fragen und auf verständliche Antworten hoffen. Klingt ein wenig überzogen, aber im Prinzip läuft es darauf hinaus.
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Next

Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 1 guest