baza danych obslugiwana jest przez osobna klase tyle ze zapytania w tej klasie nie sa obslugiwane w sposob o ktorym pisales poprzednio ale w calosci sa wysylane do metody ktora je wywoluje
<?php
function query($sql) {
// addScope to jest funkcja ktora ma dolozyc dodatkowy warunek na kazde zapytanie
$sql = $this->addScope($sql);
if (!$this->result) {
} else {
return $this->result;
}
}
?>
jak na razie udalo mi sie uzyskac to co chcialem uzywajac preg_split po slowach kluczowych MySQL'a (where, order by, group by etc.) i skladajac to pozniej do kupy juz po swojemu, wyglada to tak
<?php
function addScope($sql) {
$value = "someValue"; //wartosc dodatkowego warunku
// sprawdza czy zapytanie to select i wybiera nazwe przeszukiwanej tabeli i jej al
iasu, poki co zakladam ze to jest zapis bez 'AS' i ma 1 do 3 znakow
if (preg_match('/^select.*froms+(S+)(s+S{1,3}s)?.*$/',trim($sql),$table)) { $query = preg_split('/(where|group by|order by|limit)/',$sql,-1
,PREG_SPLIT_DELIM_CAPTURE
); $sql = "";
$updated = false; //czy juz dolozony jest warunek
$closePar = false; //czy nawias zostal zamkniety
foreach ($query as $queryPiece) {
//$this->sqlKeywords - zawiera slowa kluczowe MySQL'a po ktorych robie splita
if (in_array($queryPiece,$this->sqlKeywords)) { if ($updated) {
$sql .= (($closePar) ? ") " : "").$queryPiece;
$closePar = false;
} else {
$sql .= " where ".(isset($table[2
]) ?
trim($table[2])."." : "")."field3 = '".$value."' "; $sql .= ($queryPiece == 'where') ? " and (" : $queryPiece;
$closePar = ($queryPiece == 'where') ? true : false;
}
$updated = true;
} else {
$sql .= $queryPiece;
}
}
if ($closePar) {
$sql .= ")";
}
if (!$updated) {
$sql .= " where ".$table[1].".field3 = '".$value."' ";
}
}
}
?>
moze ktos ma jakis pomysl jak to zrobic lepiej czy jasniej bo sam kod specjalnie czytelny mi sie nie wydaje. Przykladowo da takiego zapytania:
select distinct ug.permission from user u left join user_group ug on u.user_group_id = ug.user_group_id where u.user_id = '3'
dostaje:
select distinct ug.permission from user u left join user_group ug on u.user_group_id = ug.user_group_id where u.field3 = 'someValue' and ( u.user_id = '3')