Databáze - úvod
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
– databází je ale mnoho různých druhů (mysql, oracle,
– všechny db implementují stejné rozhraní
Vzor Factory Impl 1/2
interface DBLayer {
public function connect($param);
public function query($sql);
}
class MySQLDBLayer implements DBLayer {
public function connect($params) {
// mysql_connect(....)
}
public function query($sql) {
// mysql_query(...)
}
}
class PGDBLayer implements DBLayer {
public function connect($params) {
//pg_connect(....)
}
public function query($sql) {
// pg_query(...)
}
}
Vzor Factory Impl 2/2
// vzor factory = tovarna na objekty
class DBFactory {
// zde to prijde!
// vim, ze vratim rozhrani typu DBLayer
public static function getDBLayer($type){
switch ($type) {
case "MySQL": return new MySQLDBLayer(); break;
case "PG": return new PGDBLayer(); break;
default: return new MySQLDBLayer();
}
}
}
Poznámka:
často se setkáme s implementací factory bez parametru. Ten je potom zjištěn v těle
metody například z nějakého konfirugračního souboru. Rozhodnutí o použíté DB
udělá uživatel při instalaci systému.
Jen jedno připojení k databázi
Vzor Singleton pro připojení k DB
Připojení je obecně drahá záležitost
Nepřipojuji se tehdy, když uz spojením mám
// jedina trida, ktera umi vsechno s DB
class DB {
private static $instance = null;
private $db_link = null;
private $result = null;
private function __construct() {}
public static function getInstance() {
if (self::$instance == null) {
self::$instance =
new DB();
self::$instance->connect();
}
return self::$instance;
return self::$instance
}
public function connect() {
if ($this->db_link == null) {
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWD,
DB_NAME);
if (!$link) {
throw new DBException(mysqli_errno($link));
}
mysqli_select_db($link,DB_NAME);
$this->db_link = $link;
}
return $this->db_link;
}
// pokračování
public function query($sql) {
$this->connect();
$this->result = mysqli_query($this->db_link,$sql);
if (mysqli)
if (!$this->result) {
throw new DBException(mysqli_error($this->db_link), $sql);