JimTheLion's Beitrag in SQL, PHP wurde als Antwort markiert.
Moin,
dein Code ist anfällig für SQL-Injections, ist aber schon nah an der sicheren Lösung dran.
$sql = ".... WHERE thema.id = ? ....";
$res = $pdo->prepare($sql);
$res->execute([$idthema]);
https://de.wikipedia.org/wiki/Prepared_Statement
Falls $idthema vom Integer-Datentyp ist, würde ein explizites Casten auch dafür sorgen, dass die Abfrage sicher ist.
$sql = ".... WHERE thema.id = " . (int) $idthema . " ...";
Wenn du bei deinem aktuellen Ansatz, Beiträge und Kommentare innerhalb einer Abfrage zu holen, bleiben möchtest, kannst du einen Gruppenbruch verwenden: https://php-de.github.io/jumpto/gruppenbruch/
Das würde dann dem Beispiel 1B entsprechen.
Die Alternative ist, zuerst die Beiträge aus der Datenbank zu holen und anschließend die jeweiligen Kommentare über weitere Abfragen abzuholen.
Ahand der Zeilenanzahl sieht es aus, als würdest du noch nicht nach EVA-Prinzip arbeiten und noch die Datenverarbeitung/Abholung und die Ausgabe vermischen. Dann ist der zweite Ansatz wahrscheinlich einfacher umzusetzen.