Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* * ***************************************************************************
- * Klasa Bazy - umożliwia dostęp do baz danych: mysql i sqlite oraz postgree
- * *****************************************************************************
- *
- * Klasa podczas inicjalizacji jest przyłączana do kontrolera jako dodatkowa
- * subklasa
- *
- * Dostęp do niej jest realizowany poprzez właściwość 'baza' kontrolera
- *
- * W dowolnej metodzie kontrolera, jeśli wcześniej baza została zainicjalizowana
- * można wykonać następujący kod
- * $this->baza->(metoda)->(metoda)->metoda()->wykonaj()
- *
- * Przykłady
- *
- * $this->baza->tabela('tabela')->pobierz()->wykonaj();
- * Wykona zapytanie SELECT * FROM 'tabela' i zwróci rekordy tego zapytania
- * w postacji tablicy numerycznej, w której każdy element to tablica asocjacyjna
- * zawierająca dane rekordu ,gdzie klucze są polami a pola - wartościami
- *
- *
- * UWAGA: każdy ciąg musi być zakończony metodą wykonaj() !!!
- *
- * Przykłady zapytan:
- * 1. $this->baza->tabela('tabela')->usun()->wykonaj();
- * DELETE FORM 'tabela'
- *
- * 2. $this->baza->tabela('tabela')->pobierz()->gdzie(array('id'=>1)
- * ->pola('user')
- * SELECT (user) FROM 'tabela' WHERE id = 2
- *
- * 3. $this->baza->tabela('tabela')->update(array('pole' => 'wartosc'))
- * ->gdzie(array('id'=>4)
- * UPDATE tabela SET pole = wartosc WHERE id = 4
- *
- * ************************************************************************** */
- class Baza {
- var $pdo;
- var $nazwa;
- var $port;
- var $login;
- var $haslo;
- var $zapytanie = ' SELECT * FROM tabela WHERE 1 = 1';
- var $operacja = ' SELECT ';
- var $tabela = ' tabela ';
- var $pola = ' * ';
- var $z = ' FROM ';
- var $warunek = ' WHERE 1 = 1';
- var $wartosci = '';
- var $handlers = array();
- /* * *******************************************************************
- * Konstruktor
- * *********************************************************************** */
- public function __construct() {
- $this->resetuj();
- $this->konfiguruj();
- }
- public function konfiguruj() {
- global $konfiguracja;
- foreach ($konfiguracja['baza'] as $konfiguracjaBazy) {
- $pdo = $konfiguracjaBazy['pdo'];
- $host = $konfiguracjaBazy['host'];
- $nazwa = $konfiguracjaBazy['nazwa'];
- $port = $konfiguracjaBazy['port'];
- $login = $konfiguracjaBazy['login'];
- $haslo = $konfiguracjaBazy['haslo'];
- $znaki = $konfiguracjaBazy['znaki'];
- if ($pdo == 'mysql') {
- $handler = new PDO("mysql:host=$host;dbname=$nazwa;port=$port;charset", $login, $haslo, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $znaki"));
- } else if ($pdo == 'sqlite') {
- $handler = new PDO("sqlite:$nazwa");
- } else if ($pdo == 'pgsql') {
- $handler = new PDO("pgsql:host=$host;port=$port;dbname=$nazwa;user=$login;password=$haslo");
- }
- $this->handlers[] = $handler;
- }
- }
- /* * *****************************************************************************
- * Wybór tabeli, w kontolerze należy używać $this->baza->tabela('tabela')->(dalsze operacje)
- *
- * ***************************************************************************** */
- public function tabela($tabela) {
- $this->tabela = $tabela;
- return $this;
- }
- /* * ****************************************************************************
- * Wybór pól przy zapytaniach typu select
- * np: $this->baza->('tabela')->pola(array('pole1', 'pole2')
- * *************************************************************************** */
- public function pola($tablica) {
- $this->pola = ' ' . implode(', ', $tablica) . ' ';
- }
- /* * *****************************************************************************
- * Formułowanie części zapytania "WHERE" przy zapytaniach typu SELECT, UPDATE i DELETE
- * np: $this->baza->tabela('tabela')->where('pole' => 'wartosc')->(dalsze operacje)
- * ***************************************************************************** */
- public function gdzie($tablicaLubPole = false, $wartosc = false) {
- if (is_array($tablicaLubPole) AND !empty($tablicaLubPole)) {
- $tablica = $tablicaLubPole;
- $warunek = ' WHERE ';
- $iteracja = 0;
- foreach ($tablica as $pole => $wartosc) {
- if ($iteracja > 0)
- $warunek .= ' AND ';
- $wartosc = $this->handlers[0]->quote($wartosc);
- $warunek .= " $pole = $wartosc ";
- }
- $this->warunek = $warunek;
- return $this;
- } else if (is_string($tablicaLubPole)) {
- $pole = $tablicaLubPole;
- $wartosc = $this->handlers[0]->quote($wartosc);
- $warunek = ' WHERE ' . $pole . ' = ' . $wartosc;
- $this->warunek = $warunek;
- return $this;
- } else {
- return $this;
- }
- }
- /* * ****************************************************************************
- * Ustawienie bazy na zapytanie typu SELECT
- * np: $this->baza->tabela('tabela')->pola(array('pole1', 'pole2'))->pobierz()
- * da zapytanie:
- * SELECT pole1, pole2 FROM 'tabela';
- *
- * *************************************************************************** */
- public function pobierz() {
- $this->operacja = ' SELECT ';
- $this->wartosci = '';
- if (empty($this->pola)) {
- $this->pola = ' * ';
- }
- return $this;
- }
- /* * ****************************************************************************
- * Ustawienie typu zapytania na zapytanie typu UPDATE
- * np: $this->baza->tabela('tabela')->gdzie(array('id' => 2))->aktualizuj(array('pole1' => 2))
- * da zapytanie UPDATE 'tabela' SET pole1 = 2
- * *************************************************************************** */
- public function aktualizuj($tablicaWartosci) {
- $this->operacja = ' UPDATE ';
- $this->pola = '';
- $this->z = '';
- $this->formulujUstaw($tablicaWartosci);
- return $this;
- }
- /* * ****************************************************************************
- * formulujUstaw i formulujDodaj
- * metody prywatne odpowiadające za sformułowanie fragmentów zapytań dla UPDATE tabela SET (funkcja) i
- * INSERT INTO tabela (funkcja)
- * *************************************************************************** */
- private function formulujUstaw($tablicaWartosci) {
- $tablicaStringow = array();
- foreach ($tablicaWartosci as $pole => $wartosc) {
- $wartosc = $this->handlers[0]->quote($wartosc);
- $tablicaStringow[] = " $pole = $wartosc ";
- }
- $this->wartosci = ' SET ' . implode(',', $tablicaStringow);
- }
- private function formulujDodaj($tablicaWartosci) {
- $pola;
- $wartosci;
- foreach ($tablicaWartosci as $pole => $wartosc) {
- $pola[] = $pole;
- $wartosci[] = $this->handlers[0]->quote($wartosc);
- }
- $pola = " (" . implode(', ', $pola) . ") ";
- $wartosci = " ( " . implode(', ', $wartosci) . " ) ";
- $this->wartosci = $pola . ' VALUES ' . $wartosci;
- }
- /* * ****************************************************************************
- * dodaj - metoda odpowiadająca za utworzenie zapytania typu INSERT
- * np $this->baza->tabela('tabela')->insert(array('pole1' => 'wartosc1', 'pole2'=> 'wartosc2'))
- * da zapytanie INSERT INTO tabela('pole1', 'pole2') VALUES ('wartosc1', 'wartosc2')
- * *************************************************************************** */
- public function dodaj($tablicaWartosci) {
- $this->operacja = 'INSERT INTO ';
- $this->z = '';
- $this->formulujDodaj($tablicaWartosci);
- return $this;
- }
- /* * *******************************************************************
- * usun - metoda odpowiadająca za usuwanie rekordów
- * np: $this->baza->tabela('tabela')->gdzie(array ('id'=>2, 'pole1' => 'wartosc'))->usun()
- * da zapytanie: DELETE FROM 'tabela' WHERE id = 2 AND pole1 = 'wartosc'
- * *********************************************************************** */
- public function usun() {
- $this->operacja = ' DELETE ';
- $this->z = ' FROM ';
- $this->pola = '';
- $this->wartosci = '';
- return $this;
- }
- /* * *******************************************************************
- * oczysc - funkcja umożliwiająca oczyszczenie ciągu znaków ze znaków niedo-
- * puszczalnych dla danego PDO
- * *********************************************************************** */
- public function oczysc($ciag_znakow) {
- return $this->handlers[0]->quote($ciag_znakow);
- }
- /* * *******************************************************************
- * zapytanie - metoda pozwalająca na samodzielne wprowadzenie zapytania do
- * instancji klasy np:
- * $this->baza->zapytanie('SELECT * FROM 'tabela')->wykonaj();
- * wykona zapytanie i zwróci rekordy
- * *********************************************************************** */
- public function zapytanie($zapytanie) {
- $this->resetuj();
- $this->zapytanie = $zapytanie;
- return $this;
- }
- /* * **********************************************************************
- * sformuluj - metoda prywatna odpowiadająca za sformułowanie zapytania, wykonywana przy
- * wywołaniu wykonaj
- *
- * ********************************************************************** */
- private function sformuluj() {
- if (empty($this->zapytanie)) {
- $this->zapytanie = $this->operacja . $this->pola . $this->z . $this->tabela . $this->wartosci . $this->warunek;
- }
- }
- /* * **********************************************************************
- * resetuj - metoda odpowiadająca za resetowanie zapytania i pól instancji
- * klasy wywoływana po każdym wywołaniu metody - wykonaj
- * ********************************************************************** */
- public function resetuj() {
- $this->warunek = ' ';
- $this->zapytanie = '';
- $this->operacja = '';
- $this->tabela = '';
- $this->pola = '';
- $this->wartosci = '';
- $this->z = ' FROM ';
- }
- /* * **********************************************************************
- * wykonaj - metoda wykonująca zadane zapytanie na bazie danych,
- * każdy ciąg musi być zakończony jej wykonaniem na przykład:
- * $this->baza->tabela('tabela')->gdzie(array ('id'=>2, 'pole1' => 'wartosc'))->usun()->wykonaj();
- * zwraca rekordy zapytania
- * ********************************************************************** */
- public function wykonaj() {
- $this->sformuluj();
- $wynik;
- foreach ($this->handlers as &$handler) {
- $wynik = $handler->query($this->zapytanie);
- }
- $this->resetuj();
- if ($wynik) {
- return $wynik->fetchAll();
- }
- }
- /* * *******************************************************************
- * tablica - metoda zwracającą wynik, analogiczna do "wykonaj". Może być
- * wykorzystana zamiast niej.
- * Zwraca tablice numeryczną z rekordami
- * ********************************************************************** */
- public function tablica() {
- $wynik = $this->wykonaj();
- if (is_array($wynik)) {
- return $wynik;
- } else {
- return false;
- }
- }
- /* * *******************************************************************
- * jeden - metoda zwracającą wynik, analogiczna do "wykonaj". Może być
- * wykorzystana zamiast niej.
- * Zwraca tablice asocjacyjną pierwszego elementu tablicy z wynikiem
- * ********************************************************************** */
- public function jeden() {
- $wynik = $this->wykonaj();
- if (is_array($wynik)) {
- return $wynik[0];
- } else {
- return false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment