PHP-Support Versionen: > 7.3 & 8.x

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo zusammen,

in 2021 hatte ich mein Projekt begonnen mein ERP-Programm von
PHP 5.5.15 auf PHP 7.3 zu konvertieren, was zu 90% auch abgeschlossen war.

Dann musste ich das aber leider auf Grund von privaten Herausforderungen
abbrechen und nun wäre der Zeitpunkt gekommen das Ganze forzusetzen
und endlich zu Ende zu bringen.

Da die Welt sich ja immer weiter dreht, ist PHP inzwischen bei V 8.x angekommen
und somit macht es meines Erachtens keinen Sinn mehr sich mit V 7.x zu beschäftigen.

Mein Freund Google hat mir allerdings nicht verraten, wie ich FireBird in PHP 8.x
zum Laufen bekomme, da FB ja ab V 7.4 aus PHP rausgeflogen ist.

Kann mir jemand einen Tipp geben, was ich zu tun habe, damit FB unter PHP 8.x läuft ?

Plattform: Windows10 mit Xampp PHP 8.1.10 und FireBird V3.0.4.33054
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Ok, ich habe den Tread "PHP 8 - Firebird-Treiber (ibase_...); für Linux und für Windows"
von "Ira" gefunden und es mit den dort bereitgestellten DLLs zum Laufen bekommen.

Die "php_8.1.0-interbase-3.0.0-win-x64-nts.dll" wird von PHP nicht geladen / gefunden.

Mit der "php_8.1.0-interbase-3.0.0-win-x64-ts.dll" kappt es. Die wird gefunden.

Ob die DLL wirklich funktioniert kann ich noch nicht sagen, weil ich erstmal ein
paar syntaktische Fehler in meinem alten auf PHP 5.6.x basierenden Code beseitigen
muss.

Da bin ich mal gespannt.
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Hallo Hamburgo,

ob die TS- oder NTS-Variante verwendet werden muss, hängt von der eingesetzten PHP-Version ab. Diese kannst du mittels phpinfo() ermitteln. Steht im Parameter "Thread safety" enabled ist die TS-Version installiert.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo Martin,

so, ich habe meine ersten Geh-Versuche unter PHP 8.1 gemacht,
was lediglich bedeutet, dass ich alle Fehler-Meldungen, die 8.1
gegenüber PHP 5.6.40 so produziert, den neuen Anforderungen
angepasst habe, also NIX "Neues" ge-coded hab.

Die ersten paar FireBird Befehle sind auch ganz gut durchgekommen,
bis auf fbird_commit();

Das wirft folgenden Fehler:
FireBird_01.png
FireBird_01.png (35.02 KiB) 18979 mal betrachtet
Was kann bzw. habe ich da zu tun ?

Danke und viele Grüße
vr2
Beiträge: 214
Registriert: Fr 13. Apr 2018, 00:13

Hallo Hamburgo,

rufst Du commit so auf:

fbird_commit($link_or_trans_identifier)

oder so:

$link_or_trans_identifier->fbird_commit()

Letzteres wird vermutlich nicht laufen.

Grüße, Volker
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo Volker,

ich nutze die 2. Syntax und dies seit Längerem ohne Probleme.

Ok, ich versuche es mal mit der 1. Syntax und gebe ein Feedback.

Danke und Gruss
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo Volker,

ok, fein, die 1. Syntax funktioniert unter PHP 8.1.

Danke und Gruss
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo zusammen,

der fbird_commit($link_or_trans_identifier) macht leider weiterhin Probleme.

Wenn ich ein Select auf mehrere Datensätze einer Tabelle absetze und diese
in einer While-Schleife mit fbird_fetch_assoc($link_or_trans_identifier[Resource id #58]) auslese
und in dieser Schleife auf die einzelnen Datensätze derselben Tabelle mit
$db = fbird_query($link_or_trans_identifier[Resource id #53], $Update); ein Update und gleich
danach fbird_commit($link_or_trans_identifier[[Resource id #53]]) setze, erhalte ich anhängende
Fehler-Meldung:

und die While-Schleife bzw. das Script bricht beim fbird_fetch_assoc auf den 2. Datensatz ab.

Verzichte ich auf den fbird_commit($link_or_trans_identifier[[Resource id #53]]) läuft alles
problemlos, woraus ich schließe, das der fbird_commit auf die #53 auch Folgen für die
Resource id #58 hat.

Was mache ich da falsch ?
Dateianhänge
FireBird_02.png
FireBird_02.png (15.66 KiB) 18946 mal betrachtet
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Bitte poste mal den Quellcode. Dann können wir das besser nachvollziehen und ggf. verifizieren.

Dank und Gruß
Martin
Martin Köditz
it & synergy GmbH
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo Martin,

herzlichen Dank für die Bereitschaft meinen Quellcode zu durchleuchten,
aber das scheitert wohl an der Komplexität meines Codes.

Mein Programm ist multi-db-fähig, kann also mit FireBird, MySQL und
PostgreSQL (beta). Historisch bedingt allein mit FireBird über Pear-MDB2,
PDO und jetzt unter PHP 7/8 hat es auch FireBird / InterBase gelernt.

Meine Syntax in den Scripen basiert auf Pear-MDB2 und wird an Scripte
übergeben, die diese Syntax dann in die im Server konfigurierte Syntax
konvertiieren.

Da hat ein Externer kaum eine Chance mit einem "ehrenamtlich" vertrebaren
Aufwand durchzublicken.

Für mein Programm selbst brauchte ich bisher das explizite Setzen des
fbird_commit() überhaupt nicht. Das lief auch ohne zumindest bisher
problemlos.

Den fbird_commit() brauche ich bisher nur für meinen internen DB-Manager
und eingebaut, damit dieser "frisch" angelegte Tabellen im SELBEN Script
sofort "sehen" kann (hervorragender Tipp von "bfuerchau"), um die Daten
von ALT nach NEU pumpen zu können.

Viele Grüße
Antworten