Zum Inhalt springen

[PHP] SQL-Mapping per Reqular expression ?


Empfohlene Beiträge

hi,

folgendes: in einem meiner Scripte entsteht halb-dynamisch ein SQL-Statement

also select feld from table where ...

bevor es jedoch an die Datenbank geht, muss das, was die Anwendung generiert gemappt werden.

es kann z.B. sein, das da steht:

select * from mitarbeiter where Name = 'Mustermann'

dann muss es gemappt werden zu:

select * from mitarbeiter where m_Nachname = 'Mustermann'

ich habe dazu ein Mapping, z.b. als Array

"Name" => "m_Nachname" ... etz.

nun habe ich bisher ein einfaches Str_replace benutzt...problem:

wenn ich:

"Vorname" => "m_Vorname"

"Name" => "m_Nachname"

select * from mitarbeiter where Vorname = 'Mustermann'

könnte theoretisch auch

select * from mitarbeiter where m_Vorm_Nachname = 'Mustermann'

rauskommen, da er das bereits ersetzte nochmal findet.

ein split() geht nicht, da das where ja auch komplizierter sein kann, (a and B) or (c or d and e)

irgend eine idee ? , ein regulärer ausdruck vielleicht ?

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ansonsten würde in PHP wohl sowas gehen...


<?
$Query = "SELECT * FROM table WHERE field1 = 4 AND field7 LIKE '%foo%'";

list($Select, $Where) = split("WHERE",$Query);

$Pattern = "/(\w+)(\s*(=|LIKE)\s*)([^ ]+)/";
$Replace = "m_$1$2$4";
$NewWhere = preg_replace($Pattern, $Replace, $Where);
echo $Select."WHERE".$NewWhere."\n";
?>
[/php]

[code] > php5 -q regex.php SELECT * FROM table WHERE m_field1 = 4 AND m_field7 LIKE '%foo%' [/code]

\w+ Muß natürlich für die Feldbezeichner angepasst werden. Ich gehe hier nur von Worten aus. Ich berücksichtige nur "=" und "LIKE" Operationen. Außerdem gehen nur gleichförmige Umwandlungen (FELDBEZEICHNER -> m_FELDBEZEICHNER), nicht mal so und mal anders.

Link zu diesem Kommentar
Auf anderen Seiten teilen

es geht um eine Anwendung die aus mehreren Schichten besteht.

Der Programmierer der an der einen Schicht arbeitet (darstellungsschicht) hat keine Ahnung wie die Felder in der Datenbank heißen, er weis nur wie die Attribute im Entity-Relationship-Diagramm aussehen. Da es sein kann das mehrere Anwendungen auf die gleichen tabellen zugreifen, aber je nach Entwicklungsstand und anwendungsgebiet die Entitäten anders definiert haben, gibts da schonmal abweichungen.

daher trifft auch nur "m_" nicht zu. Es gibt jeweils ein "code" => "Datenbank" für jedes Attribut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...