einfacher regulärer ausdruck gesucht
töbi
- php
0 lulu
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
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
nameASC,idDESCmachen?
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