příklad ověření jeho existence: - nejprve musíme třídu iniciovat: $db = &new db(); - můžeme nastavit kódování, znakovou sadu pro spojení s databázi. Jde to ovšem jen pri inicializaci třídy; $db = new db('latin2'); - pro ošetření proměnných v dotazech je možno použít metodu Osetri(); pro ošetření je primárně použita funkce 'mysql_real_escape_string()', pokud není dostupná, je použita funkce mysql_escape_string, pokud ani ta není dostupná, je použito funkce addslashes(); $db->Osetri('text nebo proměnná kterou chceme ošetřit'); - a samotné vykonání databázového dotazu: $v = $db->dotaz($dotaz); nebo: $v = $db->q($dotaz); q(); je jen aliasem dotaz(); - Návratové hodnoty podle typu dotazu: SELECT: - array() => $v[$poradi_vraceneho_radku][$sloupec] - true => dotaz je v pořádku ale nic nevrátil - text => hláška o chybě v db dotaze INSERT: - int => číslo je id vloženého záznamu - 'd' => jedná se o vložení duplicitní hodnoty do sloupce s unique klíčem - text => hláška o chybě v db dotaze UPDATE: - true => dotaz byl vykonán - 'd' => jedná se o vložení duplicitní hodnoty do sloupce s unique klíčem - text => hláška o chybě v db dotaze DELETE: - true => dotaz byl vykonán - text => hláška o chybě v db dotaze ***/ public $kodovani; static $pripoj; function __construct($kodovani = 'utf8') { //nejprve nastavíme připojení k db podle toho jestli jsou nastavené definice $this->sqlHost = (defined("SQL_HOST") ? SQL_HOST : '127.0.0.1'); $this->sqlUser = (defined("SQL_USERNAME") ? SQL_USERNAME :'root'); $this->sqlPass = (defined("SQL_PASSWORD") ? SQL_PASSWORD :''); $this->sqlDb = (defined("SQL_DBNAME") ? SQL_DBNAME :'counter1'); $this->kodovani = $this->Kodovani($kodovani); $this->pripoj = $this->Pripoj(); } function dotaz($dotaz) { /*** Metoda podle prvních 6 znaků vybere funkci, kterou má být zpracován dotaz, a vrátí jeho návratovou hodnotu ***/ //vytáhneme prvních 6 znaků z dotazu a převedeme na velá písmena $typ = strtoupper(substr($dotaz, 0, 6)); switch($typ) { case 'INSERT': $vysledek = $this->Insert($dotaz); return $vysledek; break; case 'UPDATE': $vysledek = $this->Update($dotaz); return $vysledek; break; case 'DELETE': $vysledek = $this->Delete($dotaz); return $vysledek; break; case 'SELECT': $vysledek = $this->Select($dotaz); return $vysledek; break; default: return $this->Error($this->dotaz); } } function q($dotaz) { //alias pro dotaz($dotaz); return $this->dotaz($dotaz); } function Kodovani($kodovani = 'utf8') { //zjistí jaké kodování je třeba použít $this->kodovani = $kodovani; return $this->kodovani; } function Pripoj() { /*** Připojení k databázi. je použito perzistentní připojení kvůli rychlejšímu zpracování db dotazů u jednoho běžícího scriptu. (nemusí se čekat na další připojení k db) ***/ //přihlásíme se k databázovemu stroji if((!$this->pripoj = @mysql_pconnect($this->sqlHost, $this->sqlUser , $this->sqlPass))) { echo '
Je mi líto, databáza je nedostupná... Nastala chyba připojení k DB
'; echo '' . $this->sqlHost . '
' . $this->sqlUser . '
' . $this->sqlPass . '
'; exit; } //připojíme se k databázi if(!@mysql_select_db($this->sqlDb)) { echo 'Je mi líto, databáza je nedostupná... Chyba: neznámá DB
'; echo '' . $this->sqlDb . '
'; exit; } //nastavíme kódovou stránkupřipojení //echo "SET NAMES '" . $this->kodovani . "'"; mysql_query("SET NAMES '" . $this->kodovani . "'"); return $this->pripoj; } function Insert($dotaz) { /** * funkce pro ukládání dat do databáze * pokud se dotaz úspěšně vykoná, vrátí id vloženého záznamu * pokud selže, kontroluje se zda jde o duplicitu, pokud ano vrátí 'd' ***/ if(mysql_query($dotaz, $this->pripoj)) { return mysql_insert_id(); } if(mysql_errno() == 1062) { return 'd'; } return $this->Error($dotaz); } function Update($dotaz) { /** * funkce pro úpravu/změnu dat v databázi * pokud se dotaz úspěšně vykoná, vrátí true * pokud selže, kontroluje se zda jde o duplicitu, pokud ano vrátí 'd' ***/ if(mysql_query($dotaz, $this->pripoj)) { return true; //($mod == 0 ? true : mysql_affected_rows()); } if(mysql_errno() == 1062) { return 'd'; } return $this->Error($dotaz); } function Delete($dotaz) { /*** Funkce pro vykonání smazání požadovaného záznamu z tabulky ***/ if(mysql_query($dotaz, $this->pripoj)) { return true; } return $this->Error($dotaz); } function Select($dotaz) { /*** * funkce pro vytáhnutí dat z databáze * vykoná dotaz, a zapíše do pole vrácené záznamy, ty vrátí skriptu * v podobě pole $nazev[pocet_zaznamu_od_nuly][nazvy_jednotlivych_polozek] * Pokud není nalezen záznam, vrátí true ***/ if($v = mysql_query( $dotaz, $this->pripoj)) { $p = mysql_num_rows($v); if($p > 0) { $out = array(); for($i = 1; $i <= $p; $i++) { $r = mysql_fetch_assoc($v); foreach($r as $key => $foo) { $r[$key] = $foo; } $out[] = $r; } mysql_free_result($v); return $out; } return true; } return $this->Error($dotaz); } function Error($dotaz) { $email = "Došlo k chybě při vykonávání db dotazu: \n\n" . $dotaz . "\n\n\n na stránce:\n\r\n\r \n\r\n\r Databáze vrátila chybu: \n\r\n\r" . mysql_error() . "\n\r\n\r"; $log = "\n" . dbCAS . "\n\t" . $dotaz . "\n\t" . mysql_errno() . "\n\t" . mysql_error() . "\n"; $this->ZapisLog($log); //$e = db_posli_mail($email); return 'Litujeme, došlok chybě při práci s databázi. kontaktujte prosím správce ' . dbEMAIL_ADMINA . '
'; } function O($polozka, $numero = false) { //alias k Osetri return Osetri($polozka, $numero); } function Osetri($polozka, $numero = false) { /*** metoda slouží k ošetření vstupních řetězců použitých v db dotazech je ji možné zavolat až po inicializaci metoda na ošetření používá funkci mysql_real_escape_string, pokud není dostupná, použije mysql_escape_string, pokud ani tato není dostupná, použije addslashes. string umístí do apostrofu ***/ //ověříme jestli jsme již připojeni k db, pokud ne zavoláme metodu, která připojení zařídí if(empty($this->pripoj)) { $this->pripoj = $this->Pripoj(); } //Protože se ošetřují jen textové řetězce, zjistíme, jestli je obsah text, nebo nějaké číslo if((!is_numeric($polozka)) ||($numero === false)) { $polozka = "'" . (function_exists('mysql_real_escape_string') ? mysql_real_escape_string($polozka, $this->pripoj) : (function_exists('mysql_escape_string') ? mysql_escape_string($polozka) : addslashes($polozka)) ) . "'"; } return $polozka; } function ZapisLog($log) { $c = AKT_PATH . 'chyby/log.db'; $err = 'Doslok chybe pri praci s db i pri cteni/zapisu do log souboru. Zrejme nemate dostatecna prava pro zapis/cteni. Kontaktujte spravce aplikace.'; if(file_exists($c)) { if($old = @file_get_contents($c)) { $log = $old . $log; } else { echo $err; exit; } } if(file_put_contents($c, $log)) { return true; } echo $err; exit; } } ?>