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.