วันอาทิตย์ที่ 5 ธันวาคม พ.ศ. 2553

class DbExpress


<?php
/*
คลาส DbExpress จะนำข้อมูล $_POST มาสร้าง คำสั่ง query ให้โดยอัตโนมัติครับ
ทำให้เขียนโค้ดสะดวกขึ้นครับ ตอนนี้สร้างขึ้นเฉพาะคำสั่ง insert /update / delete
ส่วนคำสั่ง select จะเขียนในเวอร์ชั่นถัดไปครับ
มีคำสั่งช่วย escape string ป้องกัน sql injection
คลาสนี้ควรจะใช้ในสภาพแวดล้อมที่ magic quotes gpc off ครับ
*/

/**
*
* Description of DbExpress
*
* @author num ( http://web-programming-bookmark.blogspot.com )
* @version 0.5a
*/
class DbExpress
{
protected static $_debug;
public static function Debug($debug=true){
self::$_debug = $debug;
}
protected static $_con;
public static function Connect($host,$user,$password,$db){
if (empty(self::$_con)){
self::$_con = mysql_connect($host,$user,$password);
mysql_query('SET NAMES UTF8',self::$_con);
mysql_select_db($db,self::$_con);
}
return self::$_con;
}
public static function Close(){
if (is_resource(self::$_con))
mysql_close(self::$_con);
}
protected $_act;
protected $_cols;
protected $_table;
protected $_where;
protected function __construct($act,$table){
$this->_act = $act;
$this->_cols = array();
$this->_table = $table;
}
protected function Where(){
$args = func_get_args();
$w =& $this->_where;
if (func_num_args()==1){
$w = 'id = '.intval($_GET['id']);
}
if (func_num_args()==2){
$w = 'id = '.intval($args[1]);
}
if (func_num_args()==3){
if (is_scalar($args[2])){
$w = $args[1].' = '.self::qstr($args[2]);
} else {
$params = array_map(array($this,'qstr'),$args[2]);
array_unshift($params, str_replace('?','%s',$args[1]));
$w = call_user_func_array('sprintf', $params);
}
}
}
public static function Insert($table){
return new DbExpress('insert',$table);
}
public static function Update($table){
$o = new DbExpress('update',$table);
$params = func_get_args();
call_user_func_array(array($o,'Where'), $params);
return $o;
}
public static function Delete($table){
$o = new DbExpress('delete',$table);
$params = func_get_args();
call_user_func_array(array($o,'Where'), $params);
return $o;
}

public static function qstr($s){
return "'".mysql_real_escape_string($s,self::$_con)."'";
}
public function Query(){
if ($this->_act === 'insert'){
$names = implode(',',array_keys($this->_cols));
$values = implode(',',array_map(array($this,'qstr'),$this->_cols));
$q = sprintf('INSERT INTO %s(%s) VALUES(%s)', $this->_table, $names, $values);
} else {
//action
if ($this->_act === 'update'){
$q = '';
foreach($this->_cols as $name=>$val)
$q.= ','.$name.'='.self::qstr($val);
$q = 'UPDATE '.$this->_table.' SET '.substr($q,1).' WHERE '.$this->_where;
}
if ($this->_act === 'delete'){
$q = 'DELETE FROM '.$this->_table.' WHERE '.$this->_where;
}
}
return $q;
}
public function Save(){
$q = $this->Query();
if (self::$_debug)
echo '<br','>',htmlspecialchars($q);
mysql_query($q,self::$_con) or die(htmlspecialchars(mysql_error()));
}
protected function __get($name){
$this->_cols[$name] = empty($_POST[$name]) ? '' : $_POST[$name];
return $this;
}

}

//ตั้งค่า timezone เป็นเวลาประเทศไทย
date_default_timezone_set('Asia/Bangkok');

//จำลองข้อมูลจาก form
$_POST['title'] = 't1';
$_POST['name'] = 'n1\'';
$_POST['detail'] = 'd1';
$_POST['create_at'] = date('Y-m-d H:i:s');
$_GET['id'] = 1;


//ตัวอย่างการใช้งาน

//ต่อ database mysql
DbExpress::Connect('localhost', 'root', '12345', 'dbname');
DbExpress::Debug(true);

//ทำการ update ข้อมูลตาราง tbcontact เฉพาะ record ที่ฟิลด์ id=$_GET['id']
DbExpress::Update('tbcontact')
->title
->name
->detail
->create_at
->Save();

//ทำการ update ข้อมูลตาราง tbcontact เฉพาะ record ที่ฟิลด์ title='test'
DbExpress::Update('tbcontact','title','test\'')
->title
->name
->detail
->create_at
->Save();

//ทำการ update ข้อมูลตาราง tbcontact ตามเงื่อนไข
DbExpress::Update('tbcontact','id between ? and ?',array(18,20))
->title
->name
->detail
->create_at
->Save();

//ทำการ insert ข้อมูลตาราง tbcontact
DbExpress::Insert('tbcontact')
->title
->name
->detail
->create_at
->Save();

//ทำการ ลบ ข้อมูลตาราง tbcontact เฉพาะ record ที่ฟิลด์ title='ffffffff'
DbExpress::Delete('tbcontact','title','ffffffff')->Save();

DbExpress::Close();
?>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น