XMLMySQLDataSet

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

XMLMySQLDataSet

Beitrag von theo »

Hallo

Dieser Thread hat mich daran erinnert, dass ich vor vielen Jahren mal einen Entwurf für eine Lösung dieses Problems gemacht habe.

Die Idee ist, mit Lazarus Datenbankkomponenten auf Web-Datenbanken zugreifen zu können, ohne den MySQL Server zu exponieren.

Als ich mir das nochmals anschauen wollte, musste ich feststellen, dass es nicht mehr läuft (insb. auf der PHP Seite).
Deshalb hier eine erneuerte Version:
https://www.theo.ch/lazarus/xmlmysqldataset.zip

In dem Zip befindet sich neben dem Lazarus Code auch eine PHP Datei.
Die muss man auf einen (LAMP) Server legen und

Code: Alles auswählen

$server   = 'localhost';
$database = '';
$username = ';
$password = '';
anpassen.

In Unit1 muss man dann die URL anpassen:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender:TObject);
begin
  bd:=TXMLMySQLDataSet.Create(self);
  bd.URL:='http://localhost/~theo/laz/query_server_xml.php';
  bd.AfterDelete:=@Datasource1DataSetAfterDelete;
  DataSource1.DataSet :=bd;
end;   
und dann müsste es eigentlich mit beliebigen Tabellen laufen.

Das ist natürlich noch für "Bastler", aber wenn Interesse besteht, könnte man das auch noch verfeinern und auf Git packen etc.
Die Sicherheit ist insofern besser, als dass man keine Firewall zum MySQL Server offen halten muss. Die meisten Provider lassen das ja eh nicht zu.
Man kann auch den Zugriff auf nur eine Datenbank beschränken.
Sonst ist aber natürlich in dieser Version auch SQL-Injection möglich. Man kann das teilweise mit MySQL User-permissions verhindern, oder auch im PHP abfangen..

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: XMLMySQLDataSet

Beitrag von fliegermichl »

Braucht es da eine neuere PHP Version?

Ich bekomme nur die Fehlermeldung

Code: Alles auswählen

PHP Parse error:  syntax error, unexpected '[' in .../httpdocs/theo/query_server_xml.php on line 27

In Zeile 27 steht 
$mysql_data_type_hash = [

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XMLMySQLDataSet

Beitrag von theo »

fliegermichl hat geschrieben:
Do 8. Sep 2022, 08:54
Braucht es da eine neuere PHP Version?
"Neuer" ist relativ. Die "short array syntax" gibt es anscheinend seit PHP 5.4.0 von 2012..
Ich habe hier PHP 7.4.25.
Man kann es auch so schreiben, das müsste klappen:

Code: Alles auswählen

$mysql_data_type_hash = array (
    1 => 'tinyint',
    2 => 'smallint',
    3 => 'int',
    4 => 'float',
    5 => 'double',
    7 => 'timestamp',
    8 => 'bigint',
    9 => 'mediumint',
    10 => 'date',
    11 => 'time',
    12 => 'datetime',
    13 => 'year',
    16 => 'bit',
    252 => 'blob', //is currently mapped to all text and blob types (MySQL 5.0.51a)
    253 => 'varchar',
    254 => 'char',
    246 => 'decimal',
);
https://www.php.net/manual/en/language.types.array.php

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: XMLMySQLDataSet

Beitrag von fliegermichl »

Ja, ich hab noch PHP 5.3
Wenn man die eckigen Klammern in Zeile 27 und Zeile 102 durch array() ersetzt, läuft es einwandfrei.

Danke, sehr nützliches Tool.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XMLMySQLDataSet

Beitrag von theo »

fliegermichl hat geschrieben:
Do 8. Sep 2022, 09:42
Ja, ich hab noch PHP 5.3
Autsch! Da würde ich so oder so mal updaten. :lol:
"PHP 5.3 is no longer officially supported as of 30 Jun 2012. If you are using this version it is highly recommended that you make plans to upgrade to the latest version of PHP."
fliegermichl hat geschrieben:
Do 8. Sep 2022, 09:42
Danke, sehr nützliches Tool.
Danke!

Es gibt sicher noch Sachen (Datentypen, Responses etc.) die nicht unterstützt sind.
Da muss man halt nach und nach herausfinden was noch fehlt, falls Interesse besteht.
Bin ja eigentlich kein Spezialist für Datenbanken mit Lazarus.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: XMLMySQLDataSet

Beitrag von fliegermichl »

Naja das mit dem Updaten ist so eine Sache.
Da bekommt man es dann wieder mit Inkompatibilitäten zu tun und muss dann halt auch alle mögliche anderen Sachen aktualisieren.

Never change a running system :-)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XMLMySQLDataSet

Beitrag von theo »

fliegermichl hat geschrieben:
Do 8. Sep 2022, 10:19
Naja das mit dem Updaten ist so eine Sache.
Da bekommt man es dann wieder mit Inkompatibilitäten zu tun und muss dann halt auch alle mögliche anderen Sachen aktualisieren.

Never change a running system :-)
Stimmt einerseits.
Aber je mehr Versionen man "verpasst", desto mehr muss man ändern bei einem Update.
Und so 10 Jahre nach dem End-of-life der Version, könnte man sich das ja mal überlegen. :wink:
Wenn du allerdings noch Code hast, welcher die alte "mysql extension" benutzt, dann läuft der ab v. 7 wirklich nicht mehr.
Das kann u.U. eine grössere Baustelle werden. Es gibt allerdings Unterstützung.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: XMLMySQLDataSet

Beitrag von fliegermichl »

Danke für die Info und den Link.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XMLMySQLDataSet

Beitrag von theo »

Habe noch ein bisschen gefeilt.
- Besseres SQL Fehlerhandling
- Feldbreite neu
- Compiler Hints und Warnings behoben
- HTTPS Support
- Kleinigkeiten

https://www.theo.ch/lazarus/xmlmysqldataset.zip

Wie gesagt, falls nachhaltiges Interesse besteht (auch an Beteiligung), kann man das auch auf Github laden.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: XMLMySQLDataSet

Beitrag von fliegermichl »

theo hat geschrieben:
Fr 9. Sep 2022, 10:39
Wie gesagt, falls nachhaltiges Interesse besteht (auch an Beteiligung), kann man das auch auf Github laden.
Ich halte das durchaus für sinnvoll. Kommunikation mit Webservern und dortigen Datenbanken ist eher keine seltene Notwendigkeit.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XMLMySQLDataSet

Beitrag von theo »

OK, hab mal hier ein Repository erstellt.

Für sachdienliche Hinweise von Lazarus DB Experten bin ich dankbar.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: XMLMySQLDataSet

Beitrag von af0815 »

Danke Theo für das Repo.

Ich habe mal kurz drübergesehen, ist ja echt genial und unkompliziert.

Etwas Kritik - Man könnte es in Source, Php und Demo in den Verzeichnissen splitten.

Ist die MIT Lizenz wichtig oder ev. die LGPL mit Linkingexception, wie in FPC/Lazarus weit verbreitet für die Komponente nicht besser und kompatibler mit dem Lazarusprojekt?

Ich muss es demnächst mal probieren, denke da aber eher als Plattform Android für das Device. Da macht es noch mehr sinn, als auf einem Mobile den ganzen DB-Treiberquatsch mitzuschleppen. Vor allen, weil ich dort alles sowieso mühsam über Strings abwickeln muss.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XMLMySQLDataSet

Beitrag von theo »

af0815 hat geschrieben:
Fr 9. Sep 2022, 20:53
Etwas Kritik - Man könnte es in Source, Php und Demo in den Verzeichnissen splitten.
Ja, vor Allem könnte man dann ein Package bzw. eine installierbare Komponente daraus machen, wie die anderen TxyDatasets.
Es ist jetzt mal so simpel, weil ich keine Hürden aufbauen will, es auszuprobieren.
Eigentlich warte ich immer noch auf Feedback, was die Grundidee betrifft und ob das überhaupt für jemanden nützlich sein könnte.
Es ist nicht mein "Herzensprojekt", ich fand es nur schade, dass ich mit Lazarus z.B. nicht auf meine Online Datenbanken zugreifen konnte und habe einen Weg gesucht.
af0815 hat geschrieben:
Fr 9. Sep 2022, 20:53
Ist die MIT Lizenz wichtig oder ev. die LGPL mit Linkingexception, wie in FPC/Lazarus weit verbreitet für die Komponente nicht besser und kompatibler mit dem Lazarusprojekt?
Eigentlich interessiert mich dieses Lizenzzeug nicht.
Ich weiss nur, dass die MIT Lizenz sehr wenig einschränkend ist.
Wenn du meinst, dass LGPL besser wäre, dann meinetwegen.
EDIT: Ist jetzt LGPL
af0815 hat geschrieben:
Fr 9. Sep 2022, 20:53
Ich muss es demnächst mal probieren.
Ja, tu das. Es gibt sicher noch Baustellen, an die ich nicht gedacht habe.
Du kannst auch gerne mithelfen, falls dir das Projekt gefällt.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: XMLMySQLDataSet

Beitrag von hubblec4 »

Hi

Ich habe das ganze auch mal getestet und sogar zum laufen bekommen und das war gar nicht so leicht.

In der XML befindet sich ein String mit dem Umlaut "ä" und dieses Zeichen wird mit einem "?" dargestellt.
Das seltsame ist das Umlaute wie "ö" und "ü" funktionieren.

Ich bekomme bei der LoadFromStream Methode einen Fehler
"Ungültiges Zeichen bei Line: 79 Pos: 53".

Als ich dann mal nur 5 Einträge mir anzeigen lassen habe gings.
Komischerweise wird in dem Tab für das XML das XML richtig angezeigt. Dort steht ein lesbares "ä".
Deshalb wars mühsam den Fehler zu finden.

Ich hatte mir dann aber mal den XML-Stream als Datei gespeichert und dort ist das "ä" so dargestellt: "xE4".

Wieso wird (BLOB) als Wert angezeigt in einigen Spalten?


Auf jedenfall ist das alles ein interessanter Ansatz.
Was für mich da noch wichtig wäre:
Wie ist das mit User-Logins?
Muss man dann immer so ein DBGrid verwenden um Datenbankeinträge anzuzeigen?

Und dann natürlich die Frage nach dem XML und dessen Aufbau:
Hast du dir diese Struktur selbst ausgedacht oder wird die irgendwie vorgegeben/verlangt?

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: XMLMySQLDataSet

Beitrag von charlytango »

hubblec4 hat geschrieben:
Sa 10. Sep 2022, 04:22
Wie ist das mit User-Logins?
Ich würde das Thema User-Login immer getrennt von dem eigentlichen DB-Login abhandeln.

Nur der PHP-Teil "weiß" die Logindaten zur Datenbank und verbindet sich immer mit dem selben Zugangsdaten.
Userlogin und deren Berechtigungen werden programmatisch geregelt und sind völlig davon abgekoppelt. Aufgehoben in einer Benutzertabelle - je nach Sicherheitsbedarf mit verschlüsselten Passworten oder auch mit verschlüsselten Feldern/Tabellen.

Antworten