SELECT * FROM `db_menu`,`db_access`,`db_online`
WHERE db_menu.Pos ='mMain'
AND db_access.accessItem = db_menu.Key
AND db_access.accessUser = 'guest-127.0.0.1'
AND db_online.onlineItem = db_access.accessKey
AND db_online.onlineOn <= '2012-09-11 15:19:08 '
AND (db_online.onlineOf >= '2012-09-11 15:19:08' or db_online.onlineOf = '')
ORDER BY db_menu.Sort ASC
Laut der Datenbank braucht diese, für exakt den selben Code:
Dieser Befehl ist in einer abgewandelten Funktion für eine andere Datenbank auch schon in Benutzung und geht wunderbar. Ich habe schon überprüft, ob alle Felder vorhanden sind, bzw. Schreibfehler (Alles korrekt).
In den System Errorlogs (Xampp) sind keine Fehler diesbezüglich vermerkt und in der “access”-Datei (Logfile) zeigt er den Zugriff auch Korrekt an.
Warum gibt er aus dieser Datenbank (wenn ich diese per PHP aufrufen will) einen TIMEOUT aus, obwohl keine offensichtlichen Fehler vorhanden sind.
Danke schon einmal im Vorraus für die Hilfe
PS: mysql close habe ich auch schon getestet aber die Verbindung davor wird auch wieder richtig (automatisch) geschlossen. Daran kann es nicht liegen.
Naja, die Fehlermeldung besagt ja, dass der Fehler in der Zeile auftritt.
Das Manual sagt zu der Funktion mysqli_select_db auch folgendes:
[quote]Note:
This function should only be used to change the default database for the connection. You can select the default database with 4th parameter in mysqli_connect().[/quote]
Versuch es doch mal mit mysqli_connect mit der DB als 4. Parameter.
Ich habe es gerade noch einmal überprüft also er kommt auf die Datenbank, aber schaft es nicht (siehe erster Beitrag) den SQL-Befehl umzusetzen. (Alle anderen gehen normal)
EDIT!: Jetzt spinnt er komplett
jetzt gibt er aus der Fehler ist in Zeile 2 also
include("_conf.php");
gibt „TIMEOUT“ und das ist idiotisch, da hier nur! die Verbindungsdaten aufgelistet werden ??
_conf.php:
$sDB="localhost";//server
$bDB="XXX";//benutzername
$pDB="XXX";//passwort
$dDB="XXX";//datenbank
und beim wiederholten laden gibt er wieder aus, das die Zeile 3 den Fehler verursacht. Warum springt der zwischen den Zeilen?
Wenn andere auch das Problem haben… Ich schreib mal die Lösung auf:
Es lag grundsätzlich an dem SQL-Befehl:
SELECT * FROM `db_menu`,`db_access`,`db_online`
WHERE db_menu.Pos ='mMain'
AND db_access.accessItem = db_menu.Key
AND db_access.accessUser = 'guest-127.0.0.1'
AND db_online.onlineItem = db_access.accessKey
AND db_online.onlineOn <= '2012-09-11 15:19:08 '
AND (db_online.onlineOf >= '2012-09-11 15:19:08' or db_online.onlineOf = '')
ORDER BY db_menu.Sort ASC
Hier ist ein Datenbankübergreifender Befehl. Das heißt, es werden mehrere Tabellen angesprochen.
Daher habe ich nun die aller erste Zeile (SELECT * ) ersetzt durch:
Dadurch braucht der einen kleineren speicherraum? und kann dadurch einen schnelleren Durchlauf haben.
Hier holt er sich nur die Spalten der Tabelle “db_menu” und lässt die anderen liegen (Diese kommen nicht zur Ausgabe).
Was ich bisher nicht verstehe. Warum braucht die Abfrage länger als 30 Sekunden um insgesamt (es sind 3 Tabellen mit 2x5 Spalten und 1x 8 Spalten) 18 Spalten in den Speicher zu lesen und dazu die Zeilen auszugeben (Datensatz von insgesamt 8 Zeilen).
Mit der Änderung jetzt liest er nur die kompletten Spalten der einen Tabelle aus. Bloß egal wo ich nach schaue, informiere komme ich nicht drauf, warum er so lange braucht für 10 Spalten mehr aus 2 verschiedenen Tabellen.
Ich wäre sehr glücklich wenn das jemand wüsste.
Aber Mgier danke für die Tipps und den Hinweiß für den connect.