PHP dynamisch mit unterschiedlichen Datenbanken verbinden?

iQa1x  04.06.2022, 00:45

Was funktioniert nicht? Rufst du überall session_start() auf ?

speedwanted55 
Fragesteller
 04.06.2022, 02:03

Jo. Ich bekomme immer den Fehler das der Wert bei den private static variablen ein fertiger String sein muss in "" sein muss, keine PHP $_SESSION Angabe...

iQa1x  04.06.2022, 13:11

Initialisiere die Variablen eben im Konstructor mit den Session-Inhalten.. ob das aus logischer Sicht mit den static eine gute Idee ist mag ich aus dem Stück Code nicht beurteilen.

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ich habe gerade sehr viele Fragezeichen über meinem Kopf, da ich nicht wirklich verstanden habe was du eigentlich erreichen möchtest.
Ich glaube du weißt noch nicht so genau, was du eigentlich tust und was du vor hast. (Das soll aber um Gottes willen kein Vorwurf sein - jeder hat mal klein angefangen! Und wenn ich heute meine Codes von damals sehen würde .... 🙈)

Authentifizierungsinformationen (Benutzername, Kenntwort, ... etc) sollten nirgendwo im Klartext persistiert sein. Und diese Daten brauchst du auch eigentlich nur 1x bei der Authentifizierung, danach nicht mehr. Dementsprechend gibt es auch keinen Grund sie irgendwo in einer Session abzulegen.

Du hast bereits einen Fehler in deinem Konzept und der wird deine komplette weitere Entwicklung komplizierter machen als sie letztlich sein müsste.

Woher ich das weiß:Berufserfahrung
speedwanted55 
Fragesteller
 04.06.2022, 00:11

Alsooo, ich versuche es nochmal anders zu beschreiben. Der Schüler gibt eine Schul-ID an. Nun soll es für jede Schule eine eigene Datenbank geben, da es eine viel zu große DB wäre, alle Schüler / andere Inhalte der DB in EINER zu speichern - deswegen eine DB für eine Schule. Nun soll sich das Script mit der Datenbank verbinden, die zu dieser Schul-ID gehört. In dieser sollen dann alle weitere Vorgänge und Datenbankabfragen ablaufen. Alle Datenbankabfragen sehen so aus:

self::$_db->prepare("blablabla");

das $_db wird ja eigentlich zuvor definiert. Jetzt ist die Frage wie ich das hinbekomme, das sich das Script eben nur mit dieser, zur Schul-ID gehörigen, DB verbindet und damit weiterarbeitet. Ebenso soll das ganze nur für eine Session gelten - andere Besucher der Webseite müssen also wieder eine Schul-ID angeben, usw.

0
speedwanted55 
Fragesteller
 04.06.2022, 00:16
@speedwanted55

Würde es funktionieren die entsprechenden Daten in einer Datei zu speichern? Nach der Struktur:

{
  "db_name": "PLACEHOLDER",
  "db_user": "PLACEHOLDER",
  "db_pass": "PLACEHOLDER",
  "school_id":"PLACEHOLDER"
			  }

Aber wie würde ich dann weiter machen?

Ich hatte auch zuerst den Gedanken, ein Einheitliches PW und Username für alle Schul-DB's zu machen und dann nur die Schul-ID's dynamisch zu ersetzen - hatte das aber für zu unsicher befunden...

0
lordrvn  04.06.2022, 00:22
@speedwanted55

Die Größe ist nie ein Grund für mehrere Datenbanken, es macht auch keinen Unterschied da sie nach wie vor auf der gleichen physischen Server (=localhost) gespeichert sind. Ich habe Datenbanken mit mehreren Hundert Millionen Zeilen betrieben (auch unter MySQL) und das ohne Probleme und sehr effizient. Das könntest du dir also sparen. Und auch wenn du mehrere Datenbanken hättest, könntest du dem selben Datenbank Benutzer den Zugriff auf ebendiese gestatten. Deine Tabellenstruktur muss dann dementsprechend Designed werden um Mandantenfähig zu sein.

1
speedwanted55 
Fragesteller
 04.06.2022, 00:26
@lordrvn

Gut, dann pack ich alles in eine - Ich danke dir!

So schnell ist das Problem gelöst^^

1
lordrvn  04.06.2022, 00:26
@speedwanted55

Jegliche Art von Zugangsdaten die an das System übergeben werden müssen und nicht vom Benutzer übermittelt werden, sollten via Environment Variablen übergeben werden und von dort ausgelesen.

0
speedwanted55 
Fragesteller
 04.06.2022, 10:40
@lordrvn

Dann gleich noch eine andere Sache... Die Schüler sind in der Lage dann Dateien zu bearbeiten. In 6 unterschiedlichen Programmiersprachen. Dazu wird zuerst ein DB Eintrag und anschließend eine Datei in dem Ordner des Benutzers / der Klasse erstellt. Nun gibt es 6 unterschiedliche Editoren, für die unterschiedlichen Programmiersprachen. Dann kann ich auch, wenn ich eine HTML Datei damit erstelle, auf eine andere Verlinken. (<a> Tag) Nun möchte ich das alles aber auf eine DB umstellen. Problem: Wie verlinke ich jetzt per <a> Tag auf eine andere Seite, wenn doch der Code dieser Seite in einer Datenbank liegt?

Wordpress macht das ja auch irgendwie so. Und die Verlinkungen stehen...

Könntest du mir da weiterhelfen? Bei Fragen melde dich gern :)

0
lordrvn  04.06.2022, 23:55
@speedwanted55

du brauchst eine eindeutige Identifizierung für den Datenbankeintrag. In der Regel hast du in jeder Tabelle die du anlegst einen Primärschlüssel, welcher im einfachsten Fall ein Autoincrement integer ist und daher automatisch hochzählt für jeden Eintrag. Damit lässt sich jede Zeile einer Tabelle eindeutig identifizieren. Diesen Wert kannst du dann z.B. einfach als GET Parameter übergeben und bevor du ihn verwendest Validieren!

0