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).
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.
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.
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.