SQL-Fehler im PN-Archiv

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
HeikoStr
Mitglied
Beiträge: 12
Registriert: 18.12.2002 09:39
Wohnort: Gelsenkirchen, NRW

SQL-Fehler im PN-Archiv

Beitrag von HeikoStr »

Moin,

ich habe da ein Problem mit dem Archiv bei den Privaten Nachrichten...

Beim Aufruf des Archivs erhalte ich nur die Meldung:
Allgemeiner Fehler
Could not query private messages
Mit Such-Funktion habe ich hier nicht gefunden... Im englischen Forum nur diesen Hinweis: http://www.phpbb.com/phpBB/viewtopic.php?t=58834

Nur bringt mich das jetzt nicht viel weiter... Ich finde nämlich diese SQL-Anweisung nicht in meinem Quelltext der privmsg.php...

In Zeile 217 wird zwar eine Variable $pm_sql_user definiert, die einen Teil der Anfrage enthält, aber die kann ich so nicht ändern, wie beschrieben...

Zusätzliche Informationen: Version 2.0.3
bisher keine Mods in privmsg.php
Forum auf: http://www.fogelvrei.de/forum/

Schonmal vielen Dank für mögliche Hilfe, HeikoStr
Benutzeravatar
Mister_X
Ehemaliges Teammitglied
Beiträge: 7102
Registriert: 24.05.2001 02:00
Wohnort: Augsburg

Beitrag von Mister_X »

kannst du mal den link:DebugMode anmachen und die genauere Fehlermeldung nochmal posten.
HeikoStr
Mitglied
Beiträge: 12
Registriert: 18.12.2002 09:39
Wohnort: Gelsenkirchen, NRW

Beitrag von HeikoStr »

Es wird mir zwar jetzt keiner glauben, aber seit gestern nachmittag gibt es den Fehler in meinem Forum nicht mehr...
Seit Weihnachten (Update von 1.4 auf 2.0.3) kam diese Meldung und jetzt ist sie plötzlich weg...
Ich habe meinen Provider schon angeschrieben, ob er was am SQL-Server geändert hat... Mal abwarten, was kommt...

Gruß, Heiko

PS: Sollte der Fehler wieder kommen, werde ich die Meldung vom Debug-Mode hier posten...
HeikoStr
Mitglied
Beiträge: 12
Registriert: 18.12.2002 09:39
Wohnort: Gelsenkirchen, NRW

Beitrag von HeikoStr »

Moin,

jetzt ist der Fehler tatsächlich wieder aufgetaucht...

Hier nun die Fehlermeldung im DEBUG-Mode:
Allgemeiner Fehler

Could not query private messages

DEBUG MODE

SQL Error : 1104 The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok

SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username FROM privmsgs pm, users u WHERE ( ( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 AND u.user_id = pm.privmsgs_from_userid ) OR ( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 AND u.user_id = pm.privmsgs_from_userid ) ) ORDER BY pm.privmsgs_date DESC LIMIT 0, 50

Line : 1918
File : /opt/root/home/fogelvreide/public_html/forum/privmsg.php
Und die angesprochenen Zeilen...

Code: Alles auswählen

Zeilen 1913-1919
//
// Okay, let's build the correct folder
//
if ( !($result = $db->sql_query($sql)) )
{
        message_die(GENERAL_ERROR, 'Could not query private messages', '', __LINE__, __FILE__, $sql);
}
Ich vermute, die SQL-Anfrage wird hier definiert:

Code: Alles auswählen

Zeilen 1742-1754
        case 'savebox':
                $sql_tot .= "WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . "
                                AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
                        OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
                                AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )";

                $sql .= "WHERE ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . "
                                AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . "
                                AND u.user_id = pm.privmsgs_from_userid )
                        OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . "
                                AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . "
                                AND u.user_id = pm.privmsgs_from_userid ) )";
                break;
Gruß, Heiko
HeikoStr
Mitglied
Beiträge: 12
Registriert: 18.12.2002 09:39
Wohnort: Gelsenkirchen, NRW

Beitrag von HeikoStr »

Noch ein paar Infos zum Server:
PHP Version 4.2.2
MySQL 3.23.39

Wenns noch hilft... Leider besteht das Problem immer noch...

Gruß, Heiko

PS: Forum liegt auf www.fogelvrei.de/forum/
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Wie groß ist denn deine PN-Tabelle? Evtl. würde ich mal probieren, ob ein REPAIR TABLE (z.B. über phpMyAdmin) hilft.
Wenn's nicht klappt, könnte man versuchen, die Tabellen über ein JOIN zu verknüpfen.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
HeikoStr
Mitglied
Beiträge: 12
Registriert: 18.12.2002 09:39
Wohnort: Gelsenkirchen, NRW

Beitrag von HeikoStr »

Beide Tabellen hatten keinen Überhang...
Repair und Optimize trotzdem mal ausgeführt, aber Fehler kommt immer noch...
privmsgs: 972 Einträge und 87,0 KB
privmsgs_text: 1007 Einträge und 315,5 KB

Was meinst Du denn mit dem Join???
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

HeikoStr,

versuch mal folgenden SQL-Befehl direkt mit phpMyAdmin auszuführen:

Code: Alles auswählen

SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
  FROM privmsgs pm, users u
  WHERE (
    ( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 AND u.user_id = pm.privmsgs_from_userid ) OR
    ( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 AND u.user_id = pm.privmsgs_from_userid ) )
  ORDER BY pm.privmsgs_date DESC
  LIMIT 0, 50
anschließend den hier:

Code: Alles auswählen

SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
  FROM privmsgs pm
    INNER JOIN users u ON u.user_id = pm.privmsgs_from_userid
  WHERE (
    ( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 ) OR
    ( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 ) )
  ORDER BY pm.privmsgs_date DESC
  LIMIT 0, 50
Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
HeikoStr
Mitglied
Beiträge: 12
Registriert: 18.12.2002 09:39
Wohnort: Gelsenkirchen, NRW

Beitrag von HeikoStr »

PhilippK hat geschrieben:HeikoStr,

versuch mal folgenden SQL-Befehl direkt mit phpMyAdmin auszuführen:

Code: Alles auswählen

SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
  FROM privmsgs pm, users u
  WHERE (
    ( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 AND u.user_id = pm.privmsgs_from_userid ) OR
    ( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 AND u.user_id = pm.privmsgs_from_userid ) )
  ORDER BY pm.privmsgs_date DESC
  LIMIT 0, 50
Er erste Befehl ergab folgende Meldung:

Code: Alles auswählen

MySQL meldet: 
The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok
anschließend den hier:

Code: Alles auswählen

SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
  FROM privmsgs pm
    INNER JOIN users u ON u.user_id = pm.privmsgs_from_userid
  WHERE (
    ( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 ) OR
    ( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 ) )
  ORDER BY pm.privmsgs_date DESC
  LIMIT 0, 50
Und jetzt bringt er mir die 6 Nachrichten, die im Archiv sind...
Was muß ich denn nun im Quelltext ändern???

MfG, Heiko
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Ersetzte folgendes:

Zeile 1885f.:

Code: Alles auswählen

$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username 
	FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u ";
mit

Code: Alles auswählen

$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username 
	FROM " . PRIVMSGS_TABLE . " pm INNER JOIN " . USERS_TABLE . " u ";
Zeile 1895ff.:

Code: Alles auswählen

		$sql .= "WHERE pm.privmsgs_to_userid = " . $userdata['user_id'] . "
			AND u.user_id = pm.privmsgs_from_userid
			AND ( pm.privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
				OR pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . " 
				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
mit

Code: Alles auswählen

		$sql .= "ON u.user_id = pm.privmsgs_from_userid
			WHERE pm.privmsgs_to_userid = " . $userdata['user_id'] . "
			AND ( pm.privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
				OR pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . " 
				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
Zeile 1907ff.:

Code: Alles auswählen

		$sql .= "WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
			AND u.user_id = pm.privmsgs_to_userid
			AND ( pm.privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
mit

Code: Alles auswählen

		$sql .= "ON u.user_id = pm.privmsgs_to_userid
			WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
			AND ( pm.privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
Zeile 1917ff.:

Code: Alles auswählen

		$sql .= "WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
			AND u.user_id = pm.privmsgs_to_userid
			AND pm.privmsgs_type =  " . PRIVMSGS_SENT_MAIL;
mit

Code: Alles auswählen

		$sql .= "ON u.user_id = pm.privmsgs_to_userid
			WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
			AND pm.privmsgs_type =  " . PRIVMSGS_SENT_MAIL;
Zeile 1928ff.:

Code: Alles auswählen

		$sql .= "WHERE u.user_id = pm.privmsgs_from_userid 
			AND ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . " 
				AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) 
			OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . " 
				AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) )";
mit

Code: Alles auswählen

		$sql .= "ON u.user_id = pm.privmsgs_from_userid
			WHERE ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . " 
				AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) 
			OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . " 
				AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) )";
Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“