Problem mit Zeilemumbruch

Ich habe hier eine Funktion mit einer langen Abfrage:
[PHP]function hole_waren($db)
{
$abfrage = $db->query(‚SELECT produkte.artikel_name, produkte.artikel_detail, preise.artikel_auflage, preise.artikel_preis FROM produkte JOIN preise ON produkte.artikel_gruppe = preise.artikel_gruppe WHERE preise.artikel_gruppe = „1“‘);
$daten = $abfrage->fetchAll();
$abfrage = 0;
return $daten;

}[/PHP]

die ich aus Gründen der Übersichtlichkeit gerne umbrechen möchte. Wenn ich allerdings den Zeilenumbruch vor den Schlüsselwörtern vornehme, also so:
[PHP]function hole_waren($db)
{
$abfrage = $db->query(‚SELECT produkte.artikel_name, produkte.artikel_detail,‘ .
‚preise.artikel_auflage, preise.artikel_preis‘ .
‚FROM produkte JOIN preise ON‘ .
‚produkte.artikel_gruppe = preise.artikel_gruppe‘ .
‚WHERE preise.artikel_gruppe = „1“‘);
$daten = $abfrage->fetchAll();
$abfrage = 0;
return $daten;
}[/PHP]

Dann erhalte ich einen PDO Fehler: Uncaught exception ‚PDOException‘ with message 'SQLSTATE[42000]: Syntax error or access violation

Ich sehe nicht, wo hier ein Syntax Error vorliegen soll, oder sind bei SQL-Abfragen Zeilenumbrüche vor Schlüsselwörtern nicht gestattet?

Mach mal ein echo auf dein SQL und dann siehst, dass da mindestens ein paar Leerzeichen oder sonstige Whitepaces fehlen. Ich denke du hast das \n am Zeilenende vergessen. Davon abgesehen ist es schon kürzer, das SQL direkt in den query zu schreiben. Aus Debug-Gründen würde ich es aber immer erst nach $sql schreiben und diese Variable in der Query verwenden.

Danke, die fehlenden Whitespaces vor den schließenden Hochkommata waren der Grund.

Du kannst Queries übrigens auch problemlos so formatieren:

[php]$query = "
SELECT
produkte.artikel_name,
produkte.artikel_detail,
preise.artikel_auflage,
preise.artikel_preis
FROM
produkte
JOIN
preise
ON
produkte.artikel_gruppe = preise.artikel_gruppe
WHERE
preise.artikel_gruppe = ‚1‘
";[/php]

Klar, das ist auch Geschmackssache. Ich mag es, wenn es einfach lesbar ist.

Das sieht in der Tat übersichtlicher aus. Wusste gar nicht, dass man eine mehrzeilige Abfrage auch ohne Punkt-Konkatenation schreiben kann.

Generell kann eine String-Definition in PHP-Quellcode „echte“ Zeilenumbrüche enthalten.

In SQL-Anweisungen sind Zeilenumbrüche ebenfalls kein Problem, sie werden wie beispielsweise auch Leerzeichen und Tabulatoren einfach als Whitespace gewertet.