Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrerer DB Connectionens mittels PDO

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrerer DB Connectionens mittels PDO

    Hallo zusammen,

    ich möchte gerne von einer DB Mandanten_Overview auf die DB des Mandanten kommen. Dazu habe ich alle Information für den Connect zur entsprechenden Mandanten DB in der DB Mandaten_Overview gespeichert. Der entsprechende Workflow des Mandanten sieht wie folg aus:
    1. Ich rufe die Seite auf. Dabei wird die DB Mandanten_Overview geladen.
    2. Ich logge mich ein. Sofern meine Login Daten richtig sind, bekomme ich den Zugang zu meiner DB.
    3. Nun wird mit neuen Informationen eine Verbindung zu meiner DB aufgebaut.
    Hierzu habe ich eine Klasse DBConnect gebaut, die, anhand von Host, DBName, Username, Passwort, eine Datenbankverbindung aufbauen kann. Dazu erstelle ich ein Objekt von der Klasse. Den entsprechenden Quellcode habe ich unten verlinkt.

    Mein Problem ist:

    Fatal error: Uncaught PDOException: You cannot serialize or unserialize PDO instances in [no active file]:0 Stack trace: #0 [internal function]: PDO->__sleep() #1 {main} thrown in [no active file] on line 0
    Die entsprechende Hilfe aus Stackoverflow habe ich versucht umzusetzen, allerdings ohne Erfolg. Daher stelle ich mir diese Fragen:
    • Wo liegt mein Fehler?
    • Kann ich das so umsetzen?

    Wichtig ist, dass die Mandanten jeweils ihre eigene DBs haben, weil die Strukturen der DBs nicht gleich ist.
    Hier ist eine Skizze meiner DB Landschaft:

    db_struktur.png

    PHP-Code:
      <?php  namespace API; use \PDO;  class DBConnect{          private $pdo;          public function __construct($host_name$database $user_name $password) {          $this->user_name $user_name;         try{             $this->pdo = new PDO("mysql:host=$host_name; dbname=$database;"$user_name$password);         }catch(Exception $e){             echo "Fehler!: " $e->getMessage() . "<br/>";             die();         }     }      /**      *       * @return type the pdo connection db      */     function getDatabaseConnection(){         return $this->pdo;     }          /**      *       * @param string $query      * @return type Array      */     function selectFromDB(string $query){                 $statement $this->pdo->prepare($query);         $statement->execute();          return $statement->fetchAll();     } }

    Viele Grüße aus dem Ruhrpott

    Tobias

    PS.: Ich habe diverse Quellen schon durchgeforstet und würde mich daher über einen hilfreichen Tipp sehr freuen.


  • #2
    Versuchst du da zufällig deine instanz der Klasse in eine Session zu speichern? Das geht natürlich nicht.
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

    Kommentar


    • #3
      Die Verbindungen zu den Datenbanken must du für jedes Skript immer neu erstellen. Hältst du die Verbindungen in einen DB-Objekt, dann brauchst du auch für jede Datenbank eine Objektinstanz.

      Versuch mal dein Code formatiert hier reinzustellen. So ist das nicht lesbar. Ev. einen extra Editor zu Hilfe nehmen.

      Kommentar


      • #4
        Die Datenbankverbindung kannst du nicht serialisieren. Die musst du vorm serialisieren beenden und bei dserialisieren neu aufbauen. Das kannst du mit __wakeup() und __sleep() machen. Zufälligerweise ist das Beispiel auf php.net so ziemlich 1:1: deine Klasse.
        https://www.php.net/manual/de/langua...#object.wakeup

        Kommentar


        • #5
          Da die Datenbankverbindung eh jedes Mal neu geöffnet werden müsste, würde es sogar mehr Sinn machen, lediglich die Konfigurationen der jeweiligen Datenbanken zu speichern.

          Kommentar

          Lädt...
          X