logo   OOP - Dbase() + Application()




Dbase()

Al CRUD-baseret kommunikation til og fra databasen skal gå igennem to eller flere af funktionerne i klassen Dbase():


Bortset fra tilpasning af de første 4 egenskaber (db-connect) skønnes klassen være umiddelbart genbrugbar i alle projekter.


Dbase() instantieres aldrig direkte, men altid via klassen Application().


Application()

Klassen "Application" knyttes som "extends" til de klasser, der indeholder kode, der skal have CRUD-forbindelse til databasen:

class Klassenavn extends Application {
   alle klassens egenskaber og funktioner.
}


Klassen Application() initialserer klassen Dbase() som "db".
Application() består af denne kode:

class Application {
   public $db;

   public function __construct() {
      $this->db = new Dbase();
   }
}

Koden er direkte genbrugbar i alle projekter.


Dbase() kode


Dbase() indeholder følgende kode:

(CRUD = Select, Insert, Update, Delete)

KlassenavnCRUD
egenskaber-
construct()-
connect()SIUD
close()SIUD
escape($value)IU
query($sql)S
displayResult($result)S
fetchAll($sql)S
fetchOne($sql)S
lastId()I
prepareInsert($array = null)I
insert($tabl = null)I
prepareUpdate($array = null)U
update($table = null, $id = null)U


egenskaber


private $_host = "localhost";
private $_user = "root";
private $_password = "password";
private $_name = "ecommerce";
private $_conndb = false;
public $_last_query = null;
public $_affected_rows = 0;
public $_insert_keys = array();
public $_insert_values = array();
public $_update_sets = array();
public $_id;


construct()


Starter funktionen connect() ved instantering af klassen.

public function __construct() {
   $this->connect();
}

__construct er altid bublic.


connect()


Etablerer forbindelse til databasen baseret på UTF8 eller returnerer valgfri fejltekst.

private function connect() {
   $this->_conndb = mysql_connect($this->_host, $this->_user, $this->_password);
   if (!$this->_conndb) {
      die("Database connection failed:<<br />" . mysql_error());
      } else {
      $_select = mysql_select_db($this->_name, $this->_conndb);
      if (!$_select) {
         die("Database selection failed:<br />" . mysql_error());
      }
   }
   mysql_set_charset("utf8", $this->_conndb);
}


close()


Afslutter forbindelse til databasen eller returnerer valgfri fejltekst.

public function close() {
   if (!mysql_close($this->_conndb)) {
      die("Closing connection failed.");
   }
}


escape($value)


Fjerner alle tegn, der ikke er tilladt i databasen med funktionen "mysql_real_escape_string($value)".

public function escape($value) {
   if(function_exists("mysql_real_escape_string")) {
      if (get_magic_quotes_gpc()) {
         $value = stripslashes($value);
      }
   $value = mysql_real_escape_string($value);
   } else {
      if(!get_magic_quotes_gpc()) {
         $value = addcslashes($value);
      }
   }
   return $value;
}


query($sql)


Opsamler sql-sætning til egenskaben "_last_query" til evt. brug i displayQuery().
Sender SQL-sætning og DB-opkobling til DB og får resultat tilbage som $result.
Starter displayQuery($result).
Gør $result tilgængeligt.

public function query($sql) {
   $this->_last_query = $sql;
   $result = mysql_query($sql, $this->_conndb);
   $this->displayQuery($result);
   return $result;
}


displayQuery($result)


Kontrollerer queryens success. Ved fejl vises fejltekst og den involverede sql-sætning. Ved fejlfri opdateres egenskaben "_affected_rows" (antal DB-records behandlet)

public function displayQuery($result) {
   if(!$result) {
      $output = "Database query failed: ". mysql_error() . "<br />";
      $output .= "Last SQL query was: ".$this->_last_query;
      die($output);
   } else {
      $this->_affected_rows = mysql_affected_rows($this->_conndb);
   }
}


fetchAll($sql)


Læser $result. Etablerer arrayen $out og overfører $result dertil med while-løkke. Returnerer $out.

public function fetchAll($sql) {
   $result = $this->query($sql);
   $out = array();
   while($row = mysql_fetch_assoc($result)) {
      $out[] = $row;
   }
   mysql_free_result($result);
   return $out;
}


fetchOne($sql)


Bruger fetchAll() til at hente den enkelte selekterede reqord. Ændrer $out fra array til variabel.

public function fetchOne($sql) {
   $out = $this->fetchAll($sql);
   return array_shift($out);
}


lastId()


Henter id for den sidst etablerede record ved INSERT.

public function lastId() {
   return mysql_insert_id($this->_conndb);
}


prepareInsert($array = null)


Klargør data fra $_POST så de kan læses af INSERT.

public function prepareInsert($array = null) {
   if (!empty($array)) {
      foreach($array as $key => $value) {
         $this->_insert_keys[] = $key;
         $this->_insert_values[] = $this->escape($value);
      }
   }
}


insert($tabl = null)


Udfører INSERT og opdaterer egenskabenen _id.

public function insert($table = null) {
   if (
   !empty($table) &&
   !empty($this->_insert_keys) &&
   !empty($this->_insert_values)
   ) {
      $sql = "INSERT INTO `{$table}` (`";
      $sql .= implode("`, `", $this->_insert_keys);
      $sql .= "`) VALUES ('";
      $sql .= implode("', '", $this->_insert_values);
      $sql .= "')";
      if ($this->query($sql)) {
         $this->_id = $this->lastId();
         return true;
      }
   return false;
   }
}


prepareUpdate($array = null)


Klargør data fra $_POST så de kan læses af UPDATE.

public function prepareUpdate($array = null) {
   if (!empty($array)) {
      foreach($array as $key => $value) {
         $this->_update_sets[] = "`{$key}` = '".$this->escape($value)."'";
      }
   }
}


update($table = null, $id = null)


Udfører UPDATE

public function update($table = null, $id = null) {
   if (!empty($table) && !empty($id) && !empty($this->_update_sets)) {
      $sql = "UPDATE `{$table}` SET ";
      $sql .= implode(", ", $this->_update_sets);
      $sql .= " WHERE `id` = '".$this->escape($id)."'";
      return $this->query($sql);
   }
}




















x
x