töbi: einfacher regulärer ausdruck gesucht

hallo

Wie kann ich mit einem einfachen regulären ausdruck aus:

ORDER BY name ASC, id DESC

ORDER BY name ASC, id DESC

machen?

Wenn der Feld-Name ein sql-Befehl ist gibt es sonst eine Fehlermeldung.

Danke für die Ratschläge.
töbi

  1. Huhu tobi

    so wie Du das angehst zäumst Du das Pferd von hinten auf oder?

    Wo kommt die Query denn her?

    a) "hart gecoded", dann schreibe die Backticks hinein wenn Du sie brauchst

    b) dynamisch erzeugt, dann überarbeite die entsprechenden Routinen

    Wie kann ich mit einem einfachen regulären ausdruck aus:

    ORDER BY name ASC, id DESC

    ORDER BY name ASC, id DESC

    machen?

    mit einem einzigen Ausdruck wird das etwas knifflig und vermutlich recht unübersichtlich, da Du ja alle Schlüsselwörter berücksichtigen musst.

    Eine einfache Lösung wäre es zunächst alle Worte mit Backticks einzuschliessen und dann bei den Schlüsselwörtern wieder zu entfernen.

    Ungefähr so

    <?php

    $query = <<< EOT

    SELECT
     order
    FROM

    Tabelle

    WHERE
     1
    ORDER BY name ASC, id DESC

    EOT;

    $keywords = array(

    'select',
     'where',
     'order',
     'by',
     'asc',
     'desc',
     'from',
    );

    $query = preg_replace ('#([a-z]+)#i', '\1', $query);

    $map = array();
    foreach ($keywords as $w){
     $map[] = "#($w)#i";
    }

    $query = preg_replace($map, '\1', $query);
    print_r($query);
    ?>

    Problematiisch wird es mit Anführungen, also

    z.B. bei

    INSERT "Werder wird Meister"

    oder

    WHERE Verein = "Abstiegskandidat 2004" OR verein = "1860 München"

    die müssen dann vom "backticking" ausgenommen werden.

    Für simple Queries sollte obiges Beispiel funktionieren, aber eine
    besonders sinnvolle Lösung ist es nicht.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday