Entwickler-Ecke

Internet / Netzwerk - Komponente für MySQL aber mit Umweg über PHP


ao - So 28.07.02 11:13
Titel: Komponente für MySQL aber mit Umweg über PHP
Hallo,

viele kennen vielleicht das Problem: Man hat einen Server mit MySQL-Datenbank bei einem Provider, kann aber von aussen nicht auf die Datenbank zugreifen. Nun meine Frage an euch:

Kennt jemand eine "TQuery-ähnliche" Komponente mit der man auf eine solche MySQL-Datenbank zugreifen kann indem man einen kleinen Umweg über PHP macht? Genauer: Die Komponente sendet die SQL-Anweisung an ein PHP-Script, das Script (da es local auf dem Server ausgeführt wird, hat es auch Zugriff auf die Datenbank) liefert das Ergebnis an die Komponente zurück, mit der Ergebnismenge kann man nun programmintern weiterarbeiten.

Ich habe eine solche Komponente bereits entwickelt, aber warum das Rad zweimal erfinden, wenn es solche (bessere) Komponenten schon gibt. :wink:

Gruß
Andreas


hitstec - So 28.07.02 12:44

Ich kenn sowas nicht, aber es hoert sich interessant an. Frage: wie übergibts du Arrays vom PHP-Script nach Delphi?


ao - So 28.07.02 13:25
Titel: Was meinst du für Arrays?
Hallo,

was meinst du für Arrays?

Gruß
Andreas


hitstec - So 28.07.02 13:29

Du sendest doch Anfragen an eine MySQL-Datenabnk. Als Rückgabe erhälst du im erfolgsfall ein Array zurück, also ein oder mehrere Datesätze. Meine Frage war, wie übergibst du den oder die Datensätze per PHP an Delphi weiter?

:?:


ao - So 28.07.02 21:03

Hallo,

jetzt habe ich dich verstanden! :wink:

Also meine Komponente ist ganz einfach programmiert! Bei SQL-Anweisungen die keine Datenmenge zurückliefern (z.B. INSERT, UPDATE, etc.), gibt das PHP-Script nur Eine Erfolgs- bzw. Error-Meldung zurück.
Bei einer SELECT-Anweisung wird die Datenmenge bzw. eine Error-Meldung zurückgegeben. Die Datenmenge, die das PHP-Script ausgibt, ist eine einfache Text-Seite, wobei jede Zeile ein Datensatz ist, dessen Felder durch einen Separator-String getrennt sind. Zusätzlich werden in der ersten Zeile die Namen der Spalten ausgegeben. Dann läßt sich die Komponente ungefähr wie eine vom Typ TQuery handhaben. Also Next, IsEmpty, Eof, FieldByName, ParamByName usw.

Nachteil: Keine Blob- oder Enum-Felder oder ähnliche und natürlich keine Kompatibilität mit TDataSource

Deswegen bin ich auf der Suche nach einer besseren Komponente!
Ich hoffe irgendwer kann mir helfen!

Gruß
Andreas


samti - Mo 29.07.02 15:59
Titel: Mit einem ODBC-Treiber müßte es gehen!!!
Hey es gibt die Möglichkeit auf MySQL mit einem ODBC Treiber zu zugreifen. Er steht zum Download unter http://www.mysql.com/downloads/api-myodbc-2.50.html
bereit. Dann könntest du mit den "normalen" Datenbank Kopmponenten zu greifen. Bei Installshield (Setup Programm für das Programm) wird ODBC auf unterstützt, daher kannst du daraus auch eine Anwendung machen.
Ich hoffe ich konnte Dir helfen!
Gruß


hitstec - Mo 29.07.02 16:26

Ich glaube nicht, dass ihm das weiter helfen wird. Denn seinen Angaben nach ist die Datenbank auf dem Server seines Providers und deshalb, gottseidank, per Firewall von externen Zugriffen geshützt.

Sollte jedenfalss :)


ao - Mo 29.07.02 16:57

Hallo,

hitstec hat folgendes geschrieben:
Ich glaube nicht, dass ihm das weiter helfen wird.


So ist es leider! Es muss ein Umweg über PHP gemacht werden, wie ich es beschreiben habe.

Gruß
Andreas

PS: Bin ich denn der einzige der diese Idee hatte? :cry:


HaseKlopfer - Mo 29.07.02 20:56

TMySQL
http://www.productivity.org/projects/tmysql/
hat mir in Sachen PHP + SQLOnline Datenbank ziemlich viel geholfen... bild mir ein, da gabs auch paar Settings bzgl. FireWall...

Querys, Updates, Inserts alles kein Problem...

lg,
johannes


ao - Mo 29.07.02 21:35

Hallo,

leider hilft mir die TmySQL-Komponente auch nicht weiter. Mein Problem ist es, das alle Anfragen an die mySQL-Datenbank bei meinem Provider von diesem abgeblockt werden, wenn Sie von einem System kommen, das eine andere IP-Adresse hat, als der Server, auf dem die Datenbank läuft.
Meines Erachtens muss ich also einen Umweg über PHP machen, weil nur die Scripte Zugriff haben, da sie auf dem Server selbst ausgeführt werden.

Gruß
Andreas


hitstec - Mo 29.07.02 22:25

ich denke du findest auch keine passende Komponente, weil das nur mit einer Zwei-Wege-Lösung geht, nämlich über PHP und Delphi.
Am besten du programmierst an deiner Schnittstelle weiter und veröffentlichst sie irgendwann. :lol:


ao - Di 30.07.02 20:12

Tja, dann muss ich ja, Wohl oder Übel, meine Komponente weiter entwickeln. :(
Aber danke trotzdem!

Gruß
Andreas


kamil - Fr 09.08.02 00:16

Unter http://www.freesql.org gibt es kostenlose mysql Datenbanken, auf die man direkt zugreifen kann!

Kamil


t-ob-i - Fr 09.08.02 00:40

kamil hat folgendes geschrieben:
Unter http://www.freesql.org gibt es kostenlose mysql Datenbanken, auf die man direkt zugreifen kann!


Diese sind aber auch erheblich langsamer und nicht so stabil als wenn ich dafür bezahle :D

Leider kenne ich auch keine passende Komponente. Doch möchte ich dich warnen in dem Php-Script keine Sicherheitsabfrage für die Anweisungen einzubauen. Ich könnte mir vorstellen das du nur auf manche Tabellen Zugriff gewähren willst und nicht auf alle. Wenn ich die URL der Scriptes habe könnte ich so leicht in deinen Tabellen herumschreiben.

Auch habe ich noch nie ernst mit dem Datenbankkomponenten in Delphi gearbeitet. Deswegen hab ich auch keinen Tipp mehr :D

Tobias


hitstec - Fr 09.08.02 01:03

@Tobi: Bestimmt fragt er das Script vorher um Erlaubnis 8) , also ich meine damit, dass er an das Script ein Loginpasswort sendet, das ihm erlaubt Abfragen durchzuführen.

Ansonsten dürftest du Probleme haben, selbst wenn du die URL kennst, den Syntax bzw. die Arbeitsweise des Scripts herauszufinden.

Also ich finde seinen Ansatz gar nicht mal schlecht. Natürlich ist so ein Umweg sehr langsam und ineffizient. Ist aber scheinbar die einzige Lösung.


kamil - Fr 09.08.02 01:15

ich habe beide möglichkeiten eingesetzt und habe festgestellt, das der weg über php wesentlich langsamer ist!
es gibt bei php auch probleme, wenn die datenbank ausfällt oder ein anderer fehler auftaucht.
bei direktem zugriff bekommt man eine eindeutige fehlermeldung. das ist sehr vorteilhaft.
für die testphase kann man problemlos die freesql.org datenbank benutzen, für professionellen einsatz muss man sich eine datenbank kostepflichtigen datenbank suchen.

t-ob-i: freesql.org ist um einiges schneller, als der umweg über php

Kamil


bis11 - Fr 09.08.02 12:07

Ganz einfach. Benutze die Komponenten von ZeosLib http://www.zeoslib.org. Mit diesen Komponenten kannst Du direkt in jede MySQL - Datenbank schreiben und lesen, egal wo der Server steht und wie Du Ihn erreichst.


ao - Fr 09.08.02 15:32

Hallo,

danke erstmal, das ihr euch mit meinem Problem befasst!

Also es gibt zwei Gründe, warum ich nicht eine Datenbank, wie freesql.org benutzen will:
Zitat:
bei direktem zugriff bekommt man eine eindeutige fehlermeldung. das ist sehr vorteilhaft.


Solche Fehlermeldungen bekomme ich auch, da ich auch diese von PHP an die Komponente zurückgebe.

Gruß
Andreas

PS: Natürlich habe ich das PHP-Script auch gegen Missbrauch geschützt! :wink:


bis11 - Fr 09.08.02 19:10

Du brauchst keinen Umweg über ein PHP-Skript machen. Mit den ZeosLib-Komponenten kannst Du direkt drauf zugreifen.


ao - Fr 09.08.02 20:06

Hallo bis11,

leider kann ich auch mit den Zeos-Komponenten nicht direkt auf meine MySQL-Datenbank zugreifen, am Besten du liest dir nochmal den ganzen Thread durch, dann verstehst du vielleicht auch warum! :wink:

Gruß
Andreas


bis11 - Sa 10.08.02 15:12

Eine MySQL-Datenbank und ein Web-Server sind immer zwei getrennte Systeme. Du mußt ja auch im PHP-Skript deinen Usernamen + Passwort angeben und eine zusätzliche Adresse für den MySQL-Server. So, das gleiche machst Du auch unter in dem ZesoLib-Komponenten. Damit kannst Du per SQL-Befehl auf die MySQL - Datenbank zugreifen. Ich selber habe zwei Server wo MySQL drauf läuft. Einmal ein eigener Server und dann noch ein Server bei Strato. Mit dem ZeosLib-Datenbank Explorer von der Seite kommst Du mit Sicherheit auf Deine MySQL-Datenbank. Wenn Du nicht draufkommen solltest, dann wechsel Deinen Provider.


hitstec - Sa 10.08.02 15:25

Ähm ja, Strato. Das ist ja wohl nicht dein Ernst. Strato ist der Webhoster, der auf Sicherheit pfeift. Sowohl FTP- wie auch MySQL-Zugang kann man mit gewissen "Tools" hacken.
Naja bei 1&1 ist es da schon besser gemacht worden. Erstens kennt niemand außer dem Nutzer selbst seinen Benutzernamen und zweitens ist die MySQL-Datenbank per Firewall geschützt (sehr sinnvoll!).
Wie würd das denn aussehen, wenn ich meine Datenbank mit 15000 Kunden anlege und die dann von der Konkurenz gehackt wird.

Die Firewall hat schon ihren Zweck, einen Webhoster zu nehmen, der keinerlei Sicherheiten bietet, ist fast schon kriminell. :roll:


bis11 - Sa 10.08.02 15:30

Ok, Strato ist vielleicht nicht das richtige Beispiel. Ich habe bis jetzt keine schlechte Erfahrung gemacht. Meine Seite war bis jetzt immer erreichbar. Die vielen Hackerangriffe gingen nur gegen die WEB-Visitenkarten. Aber das ist ja ein anderes Thema. Ich bin aber trotzdem noch der festen Überzeugung, daß man mit dem Datenbank-Explorer von Zeoslib auch auf die MySQL-Datenbank von jedem Provider draufkommt.


hitstec - Sa 10.08.02 15:46

Zitat von 1&1:

"Da ein Zugriff von außen auf die MySQL-Datenbank nicht möglich ist, bietet sich als Tool phpMyAdmin an. Mit diesem Tool können Sie die Datenbank und darin enthaltene Tabellen sehr komfortabel verwalten.

Bitte beachten Sie: phpMyAdmin kann nur von Ihrem Webspace bei Puretec ausgeführt werden, da die MySQL-Server keine Verbindung von extern zulassen. Eine Installation auf Ihrem heimischen Rechner beispielsweise würde daher nicht den gewünschten Erfolg bringen."

Glaubst du mir es jetzt?


bis11 - Sa 10.08.02 15:59

Das bezieht sich ja auch auf PHPMyAdmin. Dieses PHP-Tool muß ja auch auf dem Webserver ausgeführt werden wo die MySQL-Datenbank läuft. Es ist nicht dazu geschrieben Serverübergreifend zu arbeiten.
Wenn Du mit einem PHP-Skript auf die MySQl-Datenbank zugreifst, dann sieht das ja so aus :


Quelltext
1:
2:
  $db = mysql_connect("servername", "username","passwort");
  mysql_select_db("Datenbankname",$db);


So jetzt nimmst Du die drei Angaben (Servername, Username, Passwort) und trägst diese in den ZeosLib Database-Explorer ein.

Hier noch der Link für das Programm :
http://www.zeoslib.org/download/zde-1.1.4.zip

Und Du wirst mit Sicherheit draufkommen auf Deine Datenbank. Ansonsten müsste ich mich schon sehr täuschen. Probiere es einfach mal aus.


hitstec - Sa 10.08.02 16:09

Habs probiert .. und es geht nicht. Es kommt die Fehlermeldung "Unknown MySQL Server host ..".


bis11 - Sa 10.08.02 16:13

Hast Du auch eine Verbing ins Internet gehabt ? Keine Verbindung über Router oder Proxy, direkt über's Modem.


hitstec - Sa 10.08.02 16:21

Aber sicher. Direkt über's DSL-Modem.


bis11 - Sa 10.08.02 16:22

Ich revediere, es geht auch nichtmehr bei Strato.


hitstec - Sa 10.08.02 16:24

Ich habe jetzt den Host angepingt -> Kein Host vorhanden -> Firewall.


ao - Sa 10.08.02 18:39

So, seit ihr euch jetzt einig? :wink:

Da scheinbar niemand eine Komponente (wie ich sie suche) kennt, habe ich meine weiterentwickelt. Für meine Zwecke reicht sie jetzt, habe zwar noch viele Ideen und Verbesserungen im Kopf, nur leider keine Zeit.
Falls doch mal jemand auf ähnliche Komponenten stößt, bitte bescheid sagen. :D

Gruß
Andreas