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)
| Klassenavn | CRUD |
| 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);
}
}
|
|