Problem zwischen PHP und MySQL

Jukkales

Erfahrenes Mitglied
Hallo,

ich habe hier ein für mich seltsames Problem. Ich habe einen ganz normalen Query den in in MySQL aufhühre und setze ein Limit von 7 Zeilen. Im PHPMyAdmin läuft es wunderbar, alle 7 Ergebnisse werden angezeigt so wie ich es will. Jetzt Kommt mein Problem. In einer funktione will ich dieses Query auswerten und schrek: Die Funktion liest immer nur 3 Zeilen aus. Bis jetzt 3 Stunden Fehlersuche.

Die Funktion:
PHP:
function GetLastestNews()
{
	global $database,$config;
	$database->Toggle('forum');
	$result = $database->Query("
		SELECT 		threadid, prefix, topic, starttime, starter, replycount
		FROM 		`bb1_threads` 
		WHERE		`boardid` = 6
		OR			`boardid` = 2
		AND 		`prefix` != ''
		ORDER BY 	`starttime` DESC 
		LIMIT 		0 , $config[maxnews]
	");
	if(!$result)
	{		
		$database->Toggle('site');
		return 0;
	}
	else
	{
		$posts = array();
		while($row = @mysql_fetch_assoc($result))
		{
			$postresult = $database->Query("
				SELECT 		message
				FROM 		`bb1_posts` 
				WHERE		`threadid` = $row[threadid]
			");
			$message = @mysql_fetch_array($postresult);
			$row['post'] = $message[0];
			array_push($posts,$row);	
			unset($row);		
		}
		@mysql_free_result($result);
		@mysql_free_result($postresult);
		$database->Toggle('site');
		return $posts;
	}
}


Der Configeinrag für das Limit steht auch auf 7.
 
PHP:
$database->Query("
        SELECT         threadid, prefix, topic, starttime, starter, replycount
        FROM         `bb1_threads` 
        WHERE        `boardid` = 6
        OR            `boardid` = 2
        AND         `prefix` != ''
        ORDER BY     `starttime` DESC 
        LIMIT         0 , ".(int)$config['maxnews']
    );

Versuch es mal so.
 
Das habe ich auch schoneinmal Probiert. Der configwert ist bei der Deklarierung sowieso ein Integer wert also müsste man auch nicht casten ^^

Problem besteht weiterhin trodzdem danke
 
Externe Daten sollte man möglichst trotzdem validieren, denn man weiß ja nie wo etwas kompromittiert sein könnte.

Und es ging vor allem um die Schreibweise des Arrayaufrufs.
Hast du mal einfach ein Echo auf die maxnews probiert, ob da der richtige Wert auftaucht?

Ansonsten entferne mal das unset($row) aus der while Schleife und setz es außerhalb ab.
Das sieht irgendwie seltsam aus, da $row ja bei jedem Durchlauf sowieso neu "beschrieben" wird.
 
Die config einträge sind von mir bestimmt, also intern, daher kann ich das direkt hineinschreiben ansonsten häte ich schon daran gedacht.
Das unset() steht noch von einem Lösungsversuch dort welcher leider nicht funktionierte. Ob mit oder ohne, ich erhalte das gleiche ergebniss.

Wie gesagt ich habe schon seit 3 Stunden gesucht woran es liegt. Das Query funktioniert. Die Funktion trimmt es auf 3 Zeilen. :(
 
Schalte doch mal vor das return $posts; ein print_r auf Posts.
Und schau ob es da auch nur 3 Einträge sind.
Falls ja, gehst du noch ein Stück zurück und gibst immer $row aus und schaust ob es genug Einträge hat usw.

Übrigens könnte sich das Ganze auch einfacher mit einem JOIN durchführen lassen.

SQL:
SELECT
	`t.threadid`, `t.prefix`, `t.topic`, `t.starttime`, `t.starter`, `t.replycount`, `p.message`
FROM `bbl_threads` AS t
LEFT JOIN `bbl_posts` AS p
	ON `p.threadid` = `t.threadid`
WHERE `t.boardid` = 6
	OR  `t.boardid` = 2
	AND `t.prefix` != ''
ORDER BY `t.starttime` DESC 
LIMIT 0, $config['maxnews']
 
Zuletzt bearbeitet:
Ich habe $posts und $row ausgegeben. Alle beinhalten nur 3 Ergebnisse, selbst mysql_num_rows() nachdem Query ergibt 3. Aber führe ich den Befehl direkt in MySQL aus erhalte ich 7.

MIt JOIN bin ich nicht vertraut. Jedoch löst die ausführung dieser Query einen Fehler aus:

#1054 - Unknown column 't.threadid' in 'field list'
 
MySQL Documentation: JOIN

Ich würde hier definitiv auf einen JOIN setzen, der ist für Datenbank als auch für PHP um einiges schonender als deine jetzige Variante.

SQL:
SELECT
	`t.threadid`, `t.prefix`, `t.topic`, `t.starttime`, `t.starter`, `t.replycount`, `p.message`
FROM `bbl_threads` AS t
LEFT JOIN `bbl_posts` AS p
	ON `p.threadid` = `t.threadid`
WHERE `t.boardid` = 6
	OR  `t.boardid` = 2
	AND `t.prefix` != ''
ORDER BY `t.starttime` DESC 
LIMIT 0, $config['maxnews']
Wenn er sagt, dass t.threadid unbekannt ist, dann heißt das Feld in der Tabelle bbl_threads vielleicht anders?
 
Ich hab mir das mit dem JOIN jetzte inmal slebst zusammengebaut, irgendwo muss da ein Fehler sein weil er jedesmal behauptet das die Spalten nicht existieren.

Nachtrag ich hab das mit dem SQL Query nun hinbekommen und ich habe auch dne fehler gefunden. Nun interessiert mich aber das JOIN. Die Methode ist sehr praktisch nur liefert dieses Query alle Posts, ich will aber jeweils nur den ersten:

SQL:
SELECT
	bb1_threads.threadid, 
	bb1_threads.prefix, 
	bb1_threads.topic, 
	bb1_threads.starttime, 
	bb1_threads.starter, 
	bb1_threads.replycount, 
	bb1_posts.message
FROM bb1_threads
LEFT JOIN bb1_posts
    ON bb1_posts.threadid = bb1_threads.threadid
WHERE bb1_threads.boardid = 6
    OR  bb1_threads.boardid = 2
    AND bb1_threads.prefix != ''
ORDER BY bb1_threads.starttime DESC

Geht das auch?
 
Zuletzt bearbeitet:
Zurück