Link: http://us2.php.net/manual/en/language.oop5.php
The objective of this wrapper is to provide a streamlined interface to data stored in a database.
Notes
- Object properties are stored in an array. This makes managing them must easier. Upon instantiation, the array is loaded with empty strings.
- Magic methods are used to set and return properties.
- The properties have a one-to-one, exact mapping to the underlying database.
- A generic object exists beneath the specific object. It accepts a table name, identifier column name, and an array of values.
item.class.php
PHP:
<?php | |
/*mysql> show full columns from items; | |
+---------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | |
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | | |
+---------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | |
| item_id | int(10) unsigned | NULL | | PRI | NULL | auto_increment | select,insert,update,references | | | |
| name | varchar(64) | utf8_unicode_ci | | | | | select,insert,update,references | | | |
| url | varchar(128) | utf8_unicode_ci | | MUL | | | select,insert,update,references | | | |
| text | text | utf8_unicode_ci | | | | | select,insert,update,references | | | |
+---------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | |
4 rows in set (0.02 sec) | |
*/ | |
| |
require_once 'obj.class.php'; | |
Class Item Extends Obj | |
{ | |
private $aData; | |
| |
public function __construct() | |
{ | |
$this->aData=array_fill_keys(array('item_id','name','url','text'),''); | |
parent::__construct(); | |
} | |
| |
public function __set($name, $value) | |
{ | |
$this->aData[$name] = $value; | |
} | |
| |
public function __get($name) | |
{ | |
if (array_key_exists($name, $this->aData)) | |
return $this->aData[$name]; | |
} | |
| |
public function load($id) | |
{ | |
$this->aData=parent::load('items','item_id',$id); | |
} | |
| |
public function save() | |
{ | |
return parent::save('items','item_id',$this->aData); | |
} | |
} | |
| |
?> |
obj.class.php
PHP:
<?php | |
require_once 'db.class.php'; | |
| |
Class Obj | |
{ | |
private $db; | |
| |
public function __construct() | |
{ | |
$this->db=Database::singleton(); | |
} | |
| |
protected function load($sTable,$sIdName,$sId) | |
{ | |
$aResult=false; | |
$sQuery='SELECT * FROM `'.$sTable.'` WHERE `'.$sIdName.'`=\''.$this->db->SQLescape($sId).'\''; | |
$this->db->query($sQuery); | |
$aResult=$this->db->fetch_assoc(); | |
$this->db->free_result(); | |
return $aResult; | |
} | |
| |
protected function save($sTable,$sIdName,$aArgs) | |
{ | |
$sWhere=' WHERE `'.$sIdName.'`=\''.$this->db->SQLescape($aArgs[$sIdName]).'\''; | |
unset($aArgs[$sIdName]); | |
$sSet=$this->db->sPair($aArgs); | |
$sQuery='SELECT * FROM `'.$sTable.'`'.$sWhere; | |
$this->db->query($sQuery); | |
if ($this->db->num_rows()>0) | |
$sQuery='UPDATE `'.$sTable.'` SET '.$sSet.$sWhere; | |
else | |
$sQuery='INSERT INTO `'.$sTable.'` SET '.$sSet; | |
$this->db->free_result(); | |
return $this->db->query($sQuery); | |
} | |
| |
protected function remove($sTable,$sIdName,$sId) | |
{ | |
$sQuery='DELETE FROM `'.$sTable.'` WHERE `'.$sIdName.'`=\''.$this->db->SQLescape($sId).'\''; | |
return $this->db->query($sQuery); | |
} | |
| |
public function __destruct() | |
{ | |
} | |
} | |
?> |
A search function will be added.
db.class.php
PHP:
<?php | |
Class Database | |
{ | |
private static $instance; | |
| |
private $rLink; | |
private $db; | |
private $ini; | |
private $rResult; | |
| |
public function __construct() | |
{ | |
$this->ini = parse_ini_file('config.ini.php','true'); | |
$this->rLink = mysql_connect | |
($this->ini['db']['host'], | |
$this->ini['db']['user'], | |
$this->ini['db']['password']); | |
if ($this->rLink === false) | |
trigger_error(mysql_error()); | |
$this->db = mysql_select_db ($this->ini['db']['database'],$this->rLink); | |
if ($this->db === false) | |
trigger_error(mysql_error()); | |
return true; | |
} | |
| |
public static function singleton() | |
{ | |
if (!isset(self::$instance)) { | |
$c = __CLASS__; | |
self::$instance = new $c; | |
} | |
return self::$instance; | |
} | |
| |
public function SQLescape($s) | |
{ | |
return mysql_real_escape_string($s,$this->rLink); | |
} | |
| |
public function host_information() | |
{ | |
return mysql_get_host_info($this->rLink); | |
} | |
| |
public function query($sQuery) | |
{ | |
$this->rResult=mysql_query($sQuery,$this->rLink); | |
if ($this->rResult === false) | |
trigger_error(mysql_error()); | |
return $this->rResult; | |
} | |
| |
public function fetch_assoc() | |
{ | |
return mysql_fetch_assoc($this->rResult); | |
} | |
| |
public function sPair($aPair) | |
{ | |
$sReturn=''; | |
foreach ($aPair as $k => $v) | |
$sReturn .= "`$k`='".$this->SQLescape($v).'\', '; | |
$sReturn=substr($sReturn,0,-2); | |
return $sReturn; | |
} | |
| |
public function sWhere($aWhere) | |
{ | |
$sReturn=''; | |
foreach ($aWhere as $k => $v) | |
$sReturn .= " `$k`='".$this->SQLescape($v).'\' AND '; | |
return substr($sReturn,0,-4); | |
} | |
| |
public function sRegExp($aRegExp) | |
{ | |
$sReturn=''; | |
foreach ($aRegExp as $k => $v) | |
$sReturn .= " `$k` REGEXP '".$this->SQLescape($v).'\' AND '; | |
return substr($sReturn,0,-4); | |
} | |
| |
public function num_rows() | |
{ | |
return mysql_num_rows($this->rResult); | |
} | |
| |
public function free_result() | |
{ | |
mysql_free_result($this->rResult); | |
} | |
| |
public function __destruct() | |
{ | |
if (isset($this->rLink)) | |
if ($this->rLink !== false) | |
mysql_close($this->rLink); | |
} | |
| |
public function __clone() | |
{ | |
trigger_error('Clone is not allowed.', E_USER_ERROR); | |
} | |
| |
} | |
?> |