PHP 5 syntaksin mukainen olio ja kasa metodeja joilla saadaan auki MySQL tietokannat sekä luodaan kysely. Bonuksena handler (hyvin yksinkertainen) joka uudelleen käyttää olemassa olevia yhteyksiä eikä luo joka kerta uutta yhteyttä kantaan.
Kun koodin suoritus lopetaan, kutsutaan magic metodia joka sulkee automaattisesti avoimet yhteydet tietokantoihin.
Luokka tukee useampaa tietokantaa ja useampaa tietokantapalvelinta usealla eri käyttäjällä samaan aikaan.
<?php class Db { // Declare variables private $connections = array(); // Current open connections private $connID = false; // Current connection ID /** * Init class */ public function __construct() { } /** * Close connections when closing class */ public function __destruct() { if($this->connections): $max = count($this->connections); $counter = 1; reset($this->connections); while($counter <= $max): $key = key($this->connections); $this->closeConnection($this->connections[$key]['connID']); $counter ++; endwhile; endif; } /** * Execute query */ public function getResult($server, $username, $password, $db, $query) { // Open DB connection $this->openConnection($server, $username, $password); // Select DB $this->selectDb($db); // Execute query return mysql_query($query, $this->connID); } /** * Open DB connection * * @param string $server * @param string $server * @param string $server * @return resource */ private function openConnection($server, $username, $password) { if($server && ctype_alnum($username)): if($this->connectionHandler($server, $username)): return $this->connID; else: $this->connID = mysql_connect($server, $username, $password, true); endif; endif; return false; } /** * Select DB * * @param string $name * @param resource $connID * @return boolean */ private function selectDb($name = false) { if($name && is_resource($this->connID)): return mysql_select_db($name, $this->connID); endif; return false; } /** * Close connection */ private function closeConnection($connID) { return mysql_close($connID); } /** * Connection handler * * @param string $server * @param string $username; */ private function connectionHandler($server, $username) { if($this->connections): $max = count($this->connections); $counter = 1; reset($this->connections); while($counter <= $max): $key = key($this->connections); if($this->connections[$key]['server'] == $server && $this->connections[$key]['username'] == $username): $this->connID = $this->connections[$key]['connID']; return true; endif; $counter ++; endwhile; endif; return false; } /** * Save new handler */ private function saveHandler($server, $username, $connID) { $this->connections[] = array('server'=>$server, 'username'=>$username, 'connID'=>$connID); } } ?>
Jees, yleishyödyllisiä luokkia. Enpä tiennytkään että vitosessa voi käyttää noita If/EndIf jne. kikkailuja...
Jaajoo, on tainnut tulla openConnection-metodin parametrikommentointeihin kopypastaa ? :P
Tuli hieman varhainen kommentointi, kun ei oo tää pätkäkään vielä varsinaisesti näkyvissä :)
Luokan nimeen olisi hyvä sisällyttää "MySQL" kun kyse on myslihandlerista. Tässä voisi käyttää preparoituja lausekkeita ehkäisemään SQL-injektioita. Private/protected funkkarien nimet voisi aloittaa alaviivalla.
tsuriga kirjoitti:
Private/protected funkkarien nimet voisi aloittaa alaviivalla.
No periaatteessa esim. Zend suosittelee kyseistä tapaa, mutta se on hieman outo monille. Tupla-alaviiva taas menee sitten monesti sekaisin esim. magic metodien kanssa.
Itse luokan nimestä olet sikäli kyllä oikeassa myös, mutta tuo vaatisi pääluokan jonka jatke tämä luokka olisi.
-W-
Aihe on jo aika vanha, joten et voi enää vastata siihen.