DB connection Umsetzung

Hallo,
vorweg: beide Möglichkeiten funktionieren. Ich möchte nur Vor- und Nachteile besser kennenlernen.

In mehreren Funktionen wird etwas mit einer Datenbank gemacht (select, delete, insert, …). Sollte die connection in jeder Funktion neu erstellt und gelöscht werden oder ist es sinnvoller die connection einmal global zu machen?

Als Parameter an die einzelnen Funktionen werden entweder die global vorhandenen Verbindungsparameter ($dbserver, $user, $pass, $database) übergeben oder eben nur die connection ($conn).

Besten Dank für Eure Meinungen

Global, gar keine Frage.

Gruß,
Steve

Wegen der Performance oder gibt es einen anderen Sinn?

Und wie/wo beende ich dann die connection (sqlsrv_close($con);)?

Ja. Wenn du eine DB-Verbindung initialisierst muss ja eine TCP-Verbindung aufgebaut werden, dann muss die Authentifizierung durchgeführt werden. Das kostet jedes Mal Zeit und Resourcen.

Laut Dokumentation, so:

https://www.php.net/manual/de/function.sqlsrv-close.php

Gruß,
Steve

Vielen Dank Dir

Ich würde da nach Einsatzszenarien unterscheiden. Die globale Verbindung ist für Szenarien in denen ein Mensch auf einen sicher verfügbaren und hinreichend lizenzierten DB-Server zugreifen kann und im Zweifelsfall nur einen Datensatz verloren geht, wenn der DB-Server mal nicht verfügbar sein sollte, recht unproblematisch. Aber es gibt natürlich auch andere Szenarien in denen der DB-Server nicht so sicher verfügbar sein muss. Ich denke da z.B. an IoT-Anwendungen, speziell über Funknetze, die vollautomatisch Daten in ggf. auch noch recht unregelmäßigen Abständen in eine DB schreiben, die dann einfach „weg“ sind. Oder an DB-Server die nach concurred usern lizenziert sind und dann unnötig lange eine der lizenzierten Verbindungen nutzen, … Auch mag es nicht jede Datenbank wenn Client-Connections sich einfach in Luft auflösen. Denke auch an Batch-Jobs die einen exklusiven DB-Zugriff benötigen, … Da sollte man dich mE dann schon Gedanken machen, wann eine Verbindung auf- und wann wieder sie wieder abgebaut wird, wie man ggf. zwischendurch überprüft, ob noch eine Verbindung besteht, und wie man angemessen auch Verbindungsfehler reagiert. Sonst könnte ein Vertrauen in „ich habe mich mit der DB verbunden - deshalb bin ich damit auch verbunden“ ggf. problematisch werden.

2 Like

Besten Dank für Deine Meinung.

Nur wegen der Performance - einen anderen Sinn erkenne ich eigentlich nicht. Von der Sicherheit angefangen bis hin zur Anzahl der gleichzeitigen DB-Verbindungen und dem Garbage, der dann noch im virtuellen Raum herumschwirrt.

Und soll es auch noch sauber programmiert sein, ist global die allerletzte Wahl.

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Nachrichten mehr erlaubt.