Ich habe ein sehr "wildes" Verhalten meiner MySQL-Datenbank und PHP unter Xampp auf WIn7 64 Bit (unter einem Linux-System laufen die gleichen Skripte und Daten einwandfrei).
Kurz formuliert:
Bei der Abfrage mancher (aber immer der gleichen) Datenbanktabellen via PHP bricht der Browser (hier FF) mit einer Fehlermeldung "Fehler: Verbindung unterbrochen. Die Verbindung wurde zurückgesetzt, während die Seite geladen wurde." ab.
Lang formuliert:
Innerhalb einer eigenen Datenbankklasse frage ich mit Hilfe dieser beiden Methoden einen Datensatz ab ("SELECT * FROM drecks_tabelle"). Die Tabelle beinhaltet nur einen einzigen Eintrag.
- Code: Select all
// Methode: abfragen
public function query($query) {
$this->dbLastError = '';
$this->dbLastErrorNr = 0;
$this->connect();
// Zeichensatz ausgewählt?
if ($this->useCharset) {
mysqli_query($this->connection, "SET NAMES '".$this->useCharset."'");
}
$dbResult = mysqli_query($this->connection, $query);
if (!mysqli_error($this->connection)) {
if (!$dbResult || empty ($dbResult)) {
mysqli_free_result($dbResult);
} else {
$this->dbResult = $dbResult;
}
$this->dbLastError = '';
$this->dbLastErrorNr = 0;
} else {
$this->dbLastError = mysqli_error($this->connection);
$this->dbLastErrorNr = mysqli_errno($this->connection);
}
$this->lastinsertedid = mysqli_insert_id($this->connection);
return $this->dbLastErrorNr;
}
// Methode: lesen (liefert standarmäßig ein assoziatives Array
public function get($keyType = MYSQL_ASSOC) {
if ($this->dbResult) {
$r = mysqli_fetch_array($this->dbResult, $keyType);
if (is_array($r)) {
return $r;
} else {
return array();
}
} else {
return array();
}
}
Sobald man nun auf den gelesenen Datensatz zugreift, passiert der Verbindungsfehler. Z.B. wenn man dieses hier tut:
- Code: Select all
$db->query ("SELECT * FROM drecks_tabelle LIMIT 1");
$r = $db->get();
$crash = array_shift($r);
// oder:
foreach ($r as $key => $value) {
//crash
}
Der Fehler passiert auch nicht bei allen Tabellen in der Datenbank, sondern nur bei einigen, und auch nur dann, wenn diese Tabellen nicht leer sind, also Daten gelesen werden. Ich kann allerdings nichts außergewöhnliches an diesen Crash-Tabellen erkennen:
Engine: mal InnoDB, mal MyISAM
Kollation: utf8_unicode_ci
Größe: 1-100 Datensätze
Keine Fehler (analyze und repair tun nichts weiter als "alles ok" sagen).
Interessanterweise tritt das Problem in phpMyAdmin nicht auf. Das heißt, damit kann ich "drecks_tabelle" problemlos lesen und die Inhalte bearbeitenn.
Das o.g. Skript und "drecks_tabelle" sind Teil eines Webprojektes. Dieses Webprojekt habe ich versuchsweise auf mehreren Systemen laufen lassen - mit folgenden, unerschiedlichen Ergebnissen:
1. Xampp 1.8.3, Win7 64-Bit
Skript läuft ca. 30 Sekunden und crasht mit dem Verbindungsfehler. Im Xampp-Control-Center wechselt der Status des Apache zweimal kurz von grün nach gelb während das Abfrageskript läuft. In den Log-Files sieht es so aus, als ob der Apache zweimal neu startet.
2. Xampp 1.8.2, Win7 64-Bit
Gleiches Verhalten wie 1. Allerdings scheint diese Version etwas Fehler toleranter zu sein. Die Abbrüche treten an einer anderen Stelle im Datenbakskript auf.
3. Wamp (PHP 5.5.12, MySQL 5.6.17), Win7 64-Bit
Gleiches Verhalten wie 1.
4. Lampp, Apache/2.2.22, MySQL-Client-Version: 5.5.28, anderer Rechner als 1-3
Keine Probleme, gesamte Website und alle Skripte laufen einwandfrei!
Weiß vielleicht jeamand Rat oder hat ein ähnliches Problem schonmal gehabt? Ich bin mit meinem Latein nach mehreren Xampp- (und Wamp-) Neuinstallationen etwas am Ende.
Vielen Dnak für eure Hilfe schon jetzt. Grüße, Joe