Verbindungsinstanz zu MySQL-DB geht verloren
KayL
- php
Hallo allerseits,
mein Problem: Ich manage eine Datenverbindung zu meiner MySQL5-Datenbank in einer eigenen Klasse. Im Konstruktor verbinde ich mich und halte die Verbindung in einem Klassenattribut :
class DBConnection{
var $db;
function __constructs(){
connect();
}
function connect(){
$this->db = new mysqli("localhost, "root", "anfang");
$this->db->select_db("testDB");
}
// Eine zweite Funktion behandelt einen Select :
function select($values, $table, $where, $order, $group){
$query = "....." // Hier wird der Query erstellt
$this->db->query($query); // Ausführung
}
}
Von einem PHP-Script wird die Klasse folgendermaßen instanziiert und verwendet :
$connect =& new DBConnection();
$result = $connect->select(null,"table",null,"ID DESC",null);
Zum Zeitpunkt des Aufrufs der select-Methode ist das Attribut $this->db schon wieder null und hält keine Verbindung mehr (isset($this->db wirft false). Rufe ich aus der select-Methode connect() erneut auf, läßt sich mit $this->db korrekt arbeiten.
Warum wird die Verbindung nicht in der Klasseninstanz gehalten und muss bei jedem Methoden-Aufruf neu gesetzt werden?
Vor dieser Lösung hatte ich mich über eine externe PHP per include verbunden und die Verbindung in einer globalen Variable gehalten. Das hat komischerweise einwandfrei geklappt.
Arbeite mit PHP 5, Apache 2 auf Windows-System.
*baaaaaaaaaaaaaaaatsch*
wenn man seinen Konstruktor natürlich __constructs nennt, kann das auch nichts werden.
echo $begrüßung;
function __constructs(){
connect();
}
Es sollte neben dem Namen des Konstruktors sicherlich auch $this->connect() heißen.
$connect =& new DBConnection();
Arbeite mit PHP 5, Apache 2 auf Windows-System.
PHP 5 arbeitet im Gegensatz zu seinem Vorgänger bei Objekten immer mit Referenzen. Das explizite Arbeiten mit dem & kann also entfallen.
Auch in selbst erstellten Datenbank-Wrapper-Klassen sollte man auf Fehlerbehandlung nicht verzichten. Ich hoffe mal, du hast die entsprechenden Code-Teile nur der Übersichtlichkeit wegen nicht mit angeführt.
echo "$verabschiedung $name";