Wie löse ich das Problem mit 2 Verbindungen auf eine Datenbank?

  • Hallo liebes Forum,
    ich programmiere zurzeit eine kleine Webseite mit einem Kumpel zusammen. Ich habe nun die ersten Klassen dafür geschrieben und probiere nun gerade etwas ganz neues aus (also für mich neu). Ich möchte die Session in der Datenbank speichern. Habe dafür folgende Datei:

    Ich habe eine Hauptklasse (statisch) in der ich alle anderen Klassen lade, wie zum Beispiel die Klasse für die Datenbankverbindung:

    PHP
    public static function start($startSession = true) {
            if ($startSession) {
                system::loadSession();
                session_set_save_handler('_open','_close','_read','_write','_destroy','_clean');
                session_start();
            }
            system::loadConfig();
            system::loadDatabase();
        }

    Wie ihr nun aber seht, musste ich in der Session-Datei nochmals eine Verbindung aufbauen. Warum auch immer konnte ich die Datenbank-Klasse dort nicht verwenden. Hatte sie anfangs vor dem system::loadSession() eingebunden aber es hat nicht geklappt.
    Naja okay das Problem was ich nun bekomme ist folgende Fehlermeldung:

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'www-data'@'localhost' (using password: NO) in /www/htdocs/xxxxxx/http://xxxxxx.de/core/classes/database.class.php on line 11

    Ich habe in der Doku von mysql_connect gelesen, dass es einen Parameter gibt "new_link" mit dem man eine neue Verbindung mit den selben Parametern erzwingen kann. Hat in meinem Fall leider nichts gebracht. Was anderes nützliches zu dem Thema habe ich auch nicht gefunden... Ich hoffe ihr könnt mir weiterhelfen. Ich nehme auch gerne einen Vorschlag entgegen wie ich es anders machen könnte. Vielleicht geht das ja doch irgendwie, dass ich in der Session-Funktions-Datei die Datenbankklasse nutze.

    Highfive! :)

    Don't follow me, I run into walls.

  • Mein Tipp: mal in der Doku nachsehen, was require_once macht.

    Wäre wohl auch zu finden gewesen mit

    Richtig debuggen


    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysql_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
  • Wieso sollte es denn durch require_once dieses Problem geben? Soweit ich weiß bindet require_once die Datei doch genauso ein wie require. Nur halt mit der Ausnahme, dass PHP prüft ob die Datei vorher schonmal eingebunden wurde und wenn ja sie dann nicht einbindet.

    Don't follow me, I run into walls.

  • Boah, das war kein Wink mit dem Zaunpfahl, ich habe mit dem ganzen Zaun zugeschlagen. Und du hast nix davon kapiert!!!

    PHP
    <?php
        // config.php
       $var = "Hallo Welt";
    ?>

    Und nochwas: globale Variablen sind bäh und sorgen in der Regel nur für Probleme!

    Einmal editiert, zuletzt von Bandit (1. Juni 2012 um 10:52)

  • Vielen Dank für das Beispiel. Du musst leider damit rechnen, dass in einem Hilfeforum Leute nach Hilfe fragen. Du musst nicht jeden direkt so ankacken, nur weil er mal nicht so viel weiß wie du. Man wird immer wieder hier angekackt weil man etwas nicht versteht oder sonst was, das ist echt nicht der richtige Umgang mit Leuten die es lernen wollen bzw die Probleme haben. Wenn man eigentlich gar nicht helfen will, ist das hier vielleicht der falsche Ort für einen. Trotzdem danke. Ich versuche es nun alleine weiter...
    Das mit den globalen Variablen mache ich auch nur ungern. Wollte es ja vorher so versuchen, aber das hat nicht geklappt:

    Bei diesem Versuch bekomme ich folgende Fehlermeldung:

    Warning: mysql_query(): 5 is not a valid MySQL-Link resource in /www/htdocs/xxxxxx/xxxxxx/core/classes/database.class.php on line 40

    In Zeile 40 der Datenbank Klasse wird der Query ausgeführt (mysql_query()).

    Don't follow me, I run into walls.

    3 Mal editiert, zuletzt von MyXoToD (1. Juni 2012 um 11:45)

  • Ähm, ich habe dir geschrieben, woran es liegt, und du selber schreibst noch

    Zitat

    Nur halt mit der Ausnahme, dass PHP prüft ob die Datei vorher schonmal eingebunden wurde und wenn ja sie dann nicht einbindet.


    Du gibst dir selber die Begründung, warum das nicht funktioniert und zweifelst an, dass es daran liegen könnte?!?!? Hallo? Muss man nicht verstehen, oder? Und wenn du "Richtig debuggen" angewendet hättest, hättest du selber herausfinden können, dass dir da einige Variablen fehlen!