• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Zeilemumbruch

Tronjer

Senior HTML'ler
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;

}

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;
}

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.
 
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'
    ";

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.

- PHP: Strings - Manual

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