Zwei MySQL-Anfragen auf einer Seite

S_O

Mitglied
Hallo,
ich habe gerade das Menü auf meiner Seite nach MySQL umgestellt, leider funktioniert das phpBB-Forum nicht mehr, was in meine Seite eingearbeitet ist, nicht mehr und bringt folgende Fehlermeldung:
QUOTE DEBUG MODE

SELECT c.cat_id, c.cat_title, c.cat_order FROM phpbb_categories c, phpbb_forums f WHERE f.cat_id = c.cat_id GROUP BY c.cat_id, c.cat_title, c.cat_order ORDER BY c.cat_order

Line : 120
File : \phpBB2\includes\functions.phpDiese Fehlermeldung kommt nur wenn ich vorher bereits eine MySQL-Anfrage (die mit dem Menü) mache, ansonsten klappt alles perfekt. So sieht meine Funktion zum abrufen der Datenbank aus:

CODE function GetMenu()
{
global $mysql_db_pass;
$db = mysql_connect('localhost','root',$mysql_db_pass) or die(mysql_error());
mysql_select_db('seite',$db) or die(mysql_error());
$mysql_liste = mysql_query('SELECT * FROM menu ORDER BY menu_id');
mysql_close($db);
$rows = mysql_num_rows($mysql_liste);
$result = array();
for($i=0; $i<$rows; $i++)
{
$eintrag = mysql_fetch_array($mysql_liste);
array_push($result,$eintrag);
}
mysql_free_result($mysql_liste);
return $result;
}Wenn ich den Befehl mysql_close($db); nicht mit rein nehme, sieht die Fehlermeldung anders aus, er versucht dann noch auf eine falsche Datenbank zuzugreifen. Was macht diese Funktion, das phpBB2 danach keine vernünftige Anfrage mehr machen kann?
 
Du musst nachdem du eine andere Datenbankverbindung aufgebaut hast die für phpBB wieder öffnen. Noch besser, mache die Datenbankabfrage für dein Menü bevor phpBB die Verbindung zu seiner Datenbank aufmacht.
 
Dein Problem liegt in der Variablen $db !
Diese wird bei PHPBB2 in der Datei "includes/db.php" festgelegt.
Diese Datei wird included in "common.php" und diese wiederum in "index.php", "faq.php", "groupcp.php", "memberlist.php" etc. usw., schlicht im gesamten PHPBB2.
Nun gehst Du vermutlich mit Deiner Funktion hin und überschreibst die Variable $db und das kommt eben nicht so schön.
Versuche Deine eigene Variable $db umzubenennen z.B. in $MyOwnDB, dann sollte es wieder funktionieren.

Allgemein solltest Du bei eigenen Funktionen natürlich immer prüfen, ob ein von Dir verwendeter Variablen-Name nicht bereits vergeben ist.
Merke: Zuerst prüfen erspart viel Fehlersuche
wink.gif


Hamlet
 
QUOTE Dein Problem liegt in der Variablen $db !
Diese wird bei PHPBB2 in der Datei "includes/db.php" festgelegt.
Diese Datei wird included in "common.php" und diese wiederum in "index.php", "faq.php", "groupcp.php", "memberlist.php" etc. usw., schlicht im gesamten PHPBB2.
Nun gehst Du vermutlich mit Deiner Funktion hin und überschreibst die Variable $db und das kommt eben nicht so schön.
Versuche Deine eigene Variable $db umzubenennen z.B. in $MyOwnDB, dann sollte es wieder funktionieren.Habe ich ausprobiert, ändert nichts. Ausserdem, warum sollte eine lokal in einer Funktion definierten Variable eine Variable außerhalb der Funktion beeinflussen?

QUOTE Du musst nachdem du eine andere Datenbankverbindung aufgebaut hast die für phpBB wieder öffnen. Noch besser, mache die Datenbankabfrage für dein Menü bevor phpBB die Verbindung zu seiner Datenbank aufmacht.Genau da scheint das Problem zu liegen, meine PHP-Datei, die die Funktion enthält und auch aufruft ist in der page_header.php von phpBB2 eingebunden, welche irgendwo inmitten von phpBB aufgerufen wird. Es existiert wahrscheinlich vorher eine Verbindung, die nachher auch noch benötigt wird.
Wie kann ich also prüfen ob phpBB eine Datenbankverbindung aufgebaut hat, diese an eine andere Datenbank anbinden, meine Anfrage machen und danach wieder auf die phpBB-Datenbank unlenken, falls die db-Verbindung existierte? Ich kann nicht immer davon ausgehen, dass die phpBB-Datenbank exsitiert, da die Funktion auch außerhalb von phpBB aufgerufen wird.

Noch eine Frage, was genau verändert das '@' vor einer Funktion? Ich konnte nirgendwo was dazu finden, wohl auch weil google das @ bei einer suche einfach ignoriert.
 
Das @ unterdrückt die Fehlerausgabe.

Nochmal, du musst nach deinem Menü einfach die Verbindung zur phpBB DB wiederaufnehmen, oder die Menü Abfrage vor dem phpBB Code einbinden. M.E. ist dein $db wirklich nur lokal.
 
Ja, das war das Problem, so sieht mein Code jetzt aus und es scheint zu funktionieren, wenn die globale phpBB-Variable $dbname gesetzt ist, verbindet er nachher wieder mit der Datenbank:
CODE function GetMenu()
{
global $mysql_db_pass;
global $dbname;
$db = mysql_connect('localhost','root',$mysql_db_pass) or die(mysql_error());
mysql_select_db('seite',$db) or die(mysql_error());
$mysql_liste = mysql_query('SELECT * FROM menu ORDER BY menu_id');
if (isset($dbname)) mysql_select_db($dbname,$db) or die(mysql_error());
$rows = mysql_num_rows($mysql_liste);
$result = array();
for($i=0; $i<$rows; $i++)
{
$eintrag = mysql_fetch_array($mysql_liste);
array_push($result,$eintrag);
}
mysql_free_result($mysql_liste);
return $result;
}
Vielen Dank!!
 
Zurück
Oben