Hallo zusammen,
ich habe mir eine Klasse gebastelt, die die Kommunikation zur Datenbank übernimmt (connect(), query(), ...).
Von dieser Klasse erben meine Business Objekte, die dann intern auf die Query-Methode zugreifen.
Die connect()-Methode stellt wie üblich die Verbindung zur DB her und speichert dann die Link Resource in einer statischen Variablen $connid:
Die query()-Methode greift nun beim Ausführen des Queries auf diese statische Variable zurück. Doch aus mir unerklärlichen Gründen ist die statische Variable dann keine MySQL Link Resource mehr.
Darauf hin habe ich eine reconnect()-Methode eingebaut, die prüft, ob die statische Variable noch eine Link Resource ist und falls nein, eine neue Verbindung aufbaut:
Mit dem Ergebnis, dass dutzende Verbindungen zur Datenbank, bzw. dutzende Male die connect()-Methode ausgeführt wird.
Ich hoffe, mein Problem ist verständlich und ich habe keine Infos vergessen.
Weiß jemand Rat? Wieso wird die Verbindung mehrfach hergestellt?
Wie man sieht, habe ich ja schon ein bisschen versucht zu debuggen und auch eine Art Log dazugebastelt, hier mal ein Auszug:
Gruß
Max
ich habe mir eine Klasse gebastelt, die die Kommunikation zur Datenbank übernimmt (connect(), query(), ...).
Von dieser Klasse erben meine Business Objekte, die dann intern auf die Query-Methode zugreifen.
Die connect()-Methode stellt wie üblich die Verbindung zur DB her und speichert dann die Link Resource in einer statischen Variablen $connid:
PHP-Code:
public static function connect($host, $user, $password, $database) {
$id = @mysql_connect($host, $user, $password);
var_dump($id);
if(mysql_error()) throw new Exception('Connection to database failed: '.mysql_error());
else self::$connid = $id;
if(!mysql_select_db($database, self::$connid)) throw new Exception('database selection failed: '.mysql_error());
self::$host = $host;
self::$user = $user;
self::$password = $password;
self::$database = $database;
mysql_query("SET NAMES 'utf8'");
$c = file_get_contents('log.txt');
$c.= "neu Vebinden...\n";
file_put_contents('log.txt', $c);
}
Darauf hin habe ich eine reconnect()-Methode eingebaut, die prüft, ob die statische Variable noch eine Link Resource ist und falls nein, eine neue Verbindung aufbaut:
PHP-Code:
public function query($sql) {
self::reconnect();
$this->sql = $sql;
$this->free();
$this->result = mysql_query($this->sql, self::$connid);
if(!$this->result) {
$this->errno = mysql_errno();#self::$connid);
$this->error = mysql_error();#self::$connid);
$this->getError();
} else {
$this->raiseCounter();
}
}
PHP-Code:
public static function reconnect() {
var_dump(self::$connid);
if(get_resource_type(self::$connid) != 'mysql link') {
self::connect(self::$host, self::$user, self::$password, self::$database);
}
}
Ich hoffe, mein Problem ist verständlich und ich habe keine Infos vergessen.
Weiß jemand Rat? Wieso wird die Verbindung mehrfach hergestellt?
Wie man sieht, habe ich ja schon ein bisschen versucht zu debuggen und auch eine Art Log dazugebastelt, hier mal ein Auszug:
Code:
neu Vebinden... init db... neu Vebinden... init User... neu Vebinden... init UserModel... neu Vebinden... init AdressesModel... neu Vebinden... init MembersModel... init db... Verbindung schließen... destruct db... neu Vebinden... neu Vebinden... init ProjectsManager... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... Verbindung schließen... destruct ProjectsManager... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... neu Vebinden... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... neu Vebinden... init ProjectObject... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectsManager... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... Verbindung schließen... destruct ProjectObject... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel... neu Vebinden... init MenuManager... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... Verbindung schließen... destruct MenuManager... Verbindung schließen... destruct MenuModel... Verbindung schließen... destruct MenuCaptionsModel... neu Vebinden... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... neu Vebinden... init MenuObject... neu Vebinden... init MenuModel... neu Vebinden... init MenuCaptionsModel... Verbindung schließen... destruct MenuManager... Verbindung schließen... destruct MenuModel... Verbindung schließen... destruct MenuCaptionsModel... neu Vebinden... init ProjectsManager... neu Vebinden... init ProjectsModel... neu Vebinden... init ProjectTypesModel... neu Vebinden... init AusbildungenModel... Verbindung schließen... destruct ProjectsManager... Verbindung schließen... destruct ProjectsModel... Verbindung schließen... destruct ProjectTypesModel... Verbindung schließen... destruct AusbildungenModel...
Max
Kommentar