Dominik Zawadzki ...
Temat: sposób na modele przez pdo
Witam od pewnego czasu uczę się stosować PDO w swoich projektach i natknąłem na pewna sprzeczność. Generalnie idea modelowania baz danych nakazuje tworzenie dla każdej operacji osobnego zapytania, z kolei funkcje (metody) powinny być jak najbardziej "uniwersalne" by móc je wielokrotnie wykorzystać. Do tej pory radziłem sobie z tym po przez przekazywanie do funkcji modelującej jakiś argumentów z dodatkowym kodem sql...w przypadku używania PDO wychodzi to dosyć śmiesznie...(ze względu na quote...). Najlepiej wytłumaczę o co mi chodzi na przykładzie.To pewien wycinek mojej klasy
/**
* Zwraca uczestników zadań
* @param int $zid klucz obcy - id zadania, domyślnie puste
* @param string $login nazwa użytkownika (uczestnika zadań), domyslnie puste
* @param int|string $status domyślnie puste, status z domeny danych [0..2] (w trakcie,wykonane,niepowodzenie). String z kodem SQL
* @param string $sortowanie domyślnie puste, sposób sortowania
* @return array tablica asocjacyjna z rekordami uczestnikami zadań
* @static
* @access public
*/
public static function getUczestnicy($zid='',$login='',$status='',$sortowanie='') {
$db = self::$db;
$warunki = 'WHERE ';
if($zid != '') $warunki .= '(zid = :zid)';
if($login != '') $warunki .= ' and (login = :login)';
if(is_int($status)) $warunki .= ' and (status = :status)';
else
if($status != '') $warunki .= ' and '.$status;
if($zid == '' AND $login == '' AND $status == '') $warunki = '';
if($sortowanie != '') $sortowanie = ' ORDER BY '.$sortowanie;
$uczestnicy = $db->prepare('SELECT * FROM zadania_uczestnicy '.$warunki.$sortowanie);
if($zid != '') $uczestnicy->bindValue(':zid', $zid, PDO::PARAM_INT);
if($login != '') $uczestnicy->bindValue(':login', $login, PDO::PARAM_STR);
if($status != '') $uczestnicy->bindValue(':status', $status, PDO::PARAM_INT);
if(!$uczestnicy->execute()) return false;
return $uczestnicy->fetchAll();
}
Absurdalność tego zapisu to zmienne $warunki i $sortowanie, których nie mogę wpisać przez PDO::quote a powinienem...Czyżby za bardzo poszedłem na łatwiznę? Powinienem dla każdego przypadku (np. warunków) tworzyć osobne metody? Co wtedy z sortowaniem ?
Generalnie moje marzenie to napisać kod w jednej linijce, co wszystko robi:D (mam ten kompleks)Ten post został edytowany przez Autora dnia 01.06.13 o godzinie 13:13