[PHP]Regular expression.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 13-09 16:51
Ik ben nu al een tijdje bezig met een stukje code. Ik pas een content management systeem aan op interbase. Alleen interbase heeft preserved words. Dus text kan niet als kolomnaam gebruikt worden. Aangezien dat wel bij mysql kan worden die queries rustig gebruikt in de code van het content management systeem. Ik moet dus de querys omvormen zodat er om de kolomnamen en om de tabelnamen quotes komen te staan.
Ik zal ff een voorbeeld laten zien:
code:
1
2
3
WHERE lala > 'where' AND dinges => lala 
wordt:
WHERE "lala" > 'where' AND "dinges" => "lala"

De functie ziet er zo uit:
PHP:
1
2
3
function selectObjects($table,$where = null) {

}

Dus alleen de where string moet aangepast te worden. Ik heb de volgende code gemaakt en dat werkt op zich wel:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$query = "WHERE lala > 'where' AND dinges => lala ";

//remove the values between quotes
$test = preg_replace("/\'[A-Za-z]+\'/","",$query);

//remove all sql stuff
$test = preg_replace("(where|WHERE|or|OR|and|AND)","",$test);

//remove all compare operators
$test = preg_replace("/ (=!|!=|=<|=>|<=|>=|<|>|=)/" , "",$test);

//split all column and table names into seperate strings and add them to the array
$keywords = array_unique(preg_split("/[\s,]+/",$test));

//replace quoted tablenames and column names in the original query
foreach( $keywords as $value ){
    $query = str_replace($value,"\"".$value."\"",$query);   
}

echo $query;

Hoe zou ik mijn code kunnen verbeteren zodat het een minder grote lap code is?? :) Mij lukt het na een middag prutsen niet beter.. ;(

[ Voor 22% gewijzigd door HawVer op 15-03-2005 16:20 ]

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Kun je de queries niet beter met de hand aanpassen? Of zijn het er echt heel veel (denk: meer dan honderd)?

Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 13-09 16:51
Soultaker schreef op dinsdag 15 maart 2005 @ 16:39:
Kun je de queries niet beter met de hand aanpassen? Of zijn het er echt heel veel (denk: meer dan honderd)?
Als er updates zijn van het cms dan moet ik de queries met de hand aanpassen. Dus dat is niet heel handig. Plus ja het zijn er ook nogal veel.. :P

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ten eerste kun je aan preg_replace ook een array meegeven als eerst (en/of als tweede) parameter. Je kunt dus die regexjes gewoon in een array gooien en die 3 preg_replace acties in 1 statement uitvoeren.

En wat als je nu where als column naam gebruikt? TEXT is ook soort van SQL stuff.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 13-09 16:51
Zou iemand kunnen helpen? Want die functie werkt niet. Stel een tabelnaam is module en tussen aanhalingsteken staat module dan wordt die ook vervangen door een versie met quotes. Weet iemand een oplossing hiervoor? Ik kom er niet meer uit.. ;(

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 13-09 16:51
pfff na een ochtend klieren is het gelukt. Jammer dat er niemand was die ff kon helpen.. Dit is het eind resultaat:
PHP:
1
$test = preg_replace("/(AND|and|OR|or|WHERE|where) ([A-Za-z]*)\s*(=!|!=|=<|=>|<=|>=|<|>|=)\s*('*[A-Za-z0-9]*'*)\s*/","\\1 \"\\2\" \\3 \\4 ", $query);

http://hawvie.deviantart.com/

Pagina: 1