xsharp.eu • VO und PHP restAPI
Page 1 of 2

VO und PHP restAPI

Posted: Fri Dec 23, 2022 8:28 am
by lagraf
Ich habe eine VO 2.8 App, welche Daten in diverse MySQL Tabellen nicht selbst sondern über ein PHP restAPI speichert. VO erhält dann das Ergebnis oder den Fehler als JSON String retour. Dazu benutze ich Norberts GetDocumentByGetOrPost. Datensätze werden eingefügt (POST), upgedatet (PUT), gelöscht (DELETE) und ausgelesen (GET). Einfügen, update und löschen funktioniert tadellos, kontrollierbar durch phpMyAdmin.

Beim Auslesen funktioniert allerdings nur das Auslesen eines einzelnen Datensatzes (select * from tbl where id = ?). Wenn ich aber alle Datensätze haben will (select * from tbl), dann erhalte ich immer den Stand zurück, wie er zum Zeitpunkt des VO Programmstarts war, alle danach gemachten updates und deletes scheinen nicht auf (nur eingefügte Sätze scheinen auf)!

An der PHP Routine kanns nicht liegen, da ich die korrekten Daten erhalte, wenn ich das PHP restAPI direkt im Browser oder mit anderen Programmen (z.B. Postman) aufrufe. Ausserdem bringt VO die richtigen Daten, wenn ich das VO Programm beende und neu starte. Es sieht irgendwie so aus, als ob VO oder die cHttp Klasse die Abfrage und das Ergebnis cachen würde. Ein Aufruf des Garbage Collectors hat nicht geholfen, die cHttp Klasse wird ordnungsgemäß mit Axit beendet.

Gibt es irgendetwas, das ich machen kann, was einem Beenden+Neustart der VO App entspricht, ohne die App tatsächlich neu zu starten?

VO und PHP restAPI

Posted: Fri Dec 23, 2022 8:55 am
by wriedmann
Hallo Franz,
kann es sein, dass auf der PHP-Seite kein Commit gemacht wird?
Wolfgang

VO und PHP restAPI

Posted: Fri Dec 23, 2022 9:15 am
by lagraf
Hallo Wolfgang,
MySQL steht defaultmäßig auf AutoCommit.
Ich habs auch schon mit TRANSACTION und COMMIT versucht, ändert nichts.
Außerdem zeigt ja nur die VO App die alten Werte, Aufrufe mit anderen Programmen zeigen die korrekten Daten.
Wenn ich die VO App beende, neu starte und die Abfrage nochmals mache, bekomme ich auch hier die aktuellen Werte.

VO und PHP restAPI

Posted: Fri Dec 23, 2022 9:21 am
by wriedmann
Hallo Franz,
das ist sehr komisch....wenn der Client cachen würde (also die VO-Applikation) würdest Du auch neue Sätze nicht bekommen.
Also muss das Problem serverseitig liegen.
Wolfgang

VO und PHP restAPI

Posted: Fri Dec 23, 2022 12:23 pm
by lagraf
Hallo Wolfgang,
das kann ich mir eigentlich nicht vorstellen, zumindest nicht im PHP restAPI:
  • andere Programme, welche das restAPI aufrufen, bringen die aktuellen Daten
  • VO bringt bei Aufruf eines einzelnen Datensatzes (select * from tbl where id=?) auch die richtigen Daten, nur bei Aufruf aller Daten (select * from tbl) ohne where kommen die alten Inhalte daher
  • ein Beenden/Neustart der VO App bringt auch die aktuellen Daten
Und noch eins ist mir dabei aufgefallen:
Wenn ich im PHP restAPI einen Syntaxfehler einbaue, dann bekomme ich die Fehlermeldung aus PHP an VO retour. Bessere ich den Fehler im PHP restAPI aus und starte die Abfrage erneut, ohne VO zu beenden und neu zu starten, bekomme ich trotzdem noch immer die Fehlermeldung, obwohl der Fehler ausgebessert wurde! Auch hier wird erst das korrigierte PHP restAPI verwendet, wenn ich die VO App beende und neu starte! Wer bezieht woher noch immer den alten PHP Code???

VO und PHP restAPI

Posted: Fri Dec 23, 2022 12:34 pm
by wriedmann
Hallo Franz,
dann kann es höchstens noch sein, dass ein Cache-Header gesetzt ist und die WinINet-Klasse die Daten cachen.
Dann sollte eine Wiederholung des "Select * from tbl" aber immer dieselben Daten bringen, und nicht neue Sätze zusätzlich.
Siehe hier:
https://learn.microsoft.com/de-de/troub ... nt-caching
oder das hier:
https://learn.microsoft.com/de-de/troub ... ip-address
Wolfgang

VO und PHP restAPI

Posted: Sat Dec 24, 2022 8:07 am
by lagraf
Hallo Wolfgang,
ich habe die Cache Statements in den Header eingebaut, hat aber nichts bewirkt!
Das Komische beim GET:
  • Wenn ich einen einzelnen Datensatz abrufe, bekomme ich die aktuellen Werte
  • Wenn ich alle Werte abrufe (ohne Where Bedingung) erhalte ich die alten Werte
Und das, obwohl die PHP Routine für einzelne und alle Datensätze die gleiche ist und sich nur in der Where Bedingung des Select Statements unterscheidet!
Was auch noch auffällt: Wenn ich einen Insert und einen Update hintereinander mache und dann alle Datensätze anzeige, dann sehe ich den eingefügten Satz korrekt, der upgedatete enthält aber die alten Werte.

VO und PHP restAPI

Posted: Sat Dec 24, 2022 8:08 am
by lagraf
Ich wünsche allen Lesern dieses Forums ein frohes Weihnachtsfest und ein gesundes und erfolgreiches Neues Jahr 2023!

VO und PHP restAPI

Posted: Sun Dec 25, 2022 8:49 am
by lagraf
Ich habe nun testweise das select Statement im restAPI fix auf

Code: Select all

select * from tbl where id = 3"
geändert. Somit ist die Routine im restAPI die gleiche, egal ob alle Datensätze gelistet oder nur 1 Datensatz abgerufen wird, damit kanns am restAPI nicht liegen.

Der einzige Unterschied ist in VO beim Aufruf des restAPI über GetDocumentByGetOrPost:
  • /BMTest/unity.php -> für alle Daten funktioniert nicht
  • /BMTest/unity.php/0 -> für alle Daten funktioniert nicht
  • /BMTest/unity.php/3 -> für Datensatz mit id 3 funktioniert
Ich habe keine Ahnung was bei den ersten beiden Aufrufen in der cHttp Klasse nicht funktioniert!

VO und PHP restAPI

Posted: Sun Dec 25, 2022 6:28 pm
by FFF
cHttp ist doch als Source im SDK - kannst Du da nicht reindebuggen?