加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

Postgresql DB的访问PHP类

发布时间:2020-05-30 22:57:54 所属栏目:PHP 来源:互联网
导读:Postgresql DB的访问PHP类

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

/**
* The generic DB access Class,Entry of all DB Access
* Only PG is supported -- 201210
*
* @author Anthony
* 2010-2012 reserved
*/
class DB {
// Query types
const SELECT = 1;
const INSERT = 2;
const UPDATE = 3;
const DELETE = 4;
/**
* True Value
*/
const T = 't';
/**
* False Value
*/
const F = 'f';
/**
* Null Value
*/
const N = 'N/A'; //NULL Value
/**
* Specilize the value;
* 'f' as False,'t' as TRUE,'N/A' as NULL value
*
* @param String $s,Orignal Value
*
* @return String,specilized value
*/
public static function specializeValue($s){
if($s === self::N){
return NULL;
}
if($s === self::T){
return True;
}
if($s === self::F){
return False;
}
return $s;
}
/**
* Batch insert into table
* @param String $table_name Table Name
* @param Array $cols columns of table
* @param Array $values,values array of data
* @param String/Array $return_cols Return column[s],'id' is return by default,Array for multi Column
* @param String $db Instance name of DB Connection
*
* @return Resultset return result set of return_cols
*/
public static function insert_batch($table_name,$cols,$values,$return_cols='id',$db='default'){
$_sql = 'insert into '.self::quote_table($table_name,$db).'('.self::quote_column($cols,$db).') values ';
$_vsql = array();
foreach ($values as $value){
$_vsql[] = '('.self::quote($value).')';
}
$_sql .= implode(',',$_vsql);
$_sql .= ' returning '.self::quote_column($return_cols);
return self::query(self::SELECT,$_sql)->execute($db)->as_array();
}
/**
* Insert into table from Array Data,and return column[s],ID is return by default
*
* @param String $table_name Table Name
* @param Array $data Array Data Of key value pairs.
* @param String/Array $return_cols Return column[s],Array for multi Column
* @param String $db Instance name of DB Connection
*
* @return Boolean/Resultset True if success without return column,False if failed,value of column[s] if return_cols presented.
*/
public static function insert_table($table_name,$data,$db='default'){
if (!is_array($data)){
return false;
}
if (is_null($return_cols)){
$_sql = 'insert into '.self::quote_table($table_name,$db).'('.self::quote_column(array_keys($data),$db).') values ('.
self::quote(array_values($data),$db).')';
return self::query(self::INSERT,$_sql)->execute($db);
}
//Specialize value
$data = array_map('self::specializeValue',$data);
if (is_string($return_cols)){
$_sql = 'insert into '.self::quote_table($table_name,$db).')'." returning ".$return_cols;
$id = self::query(self::SELECT,$_sql)->execute($db)->get($return_cols);
return $id;
}else{
if (is_array($return_cols)){
$ids = implode(',$return_cols);
$_sql = 'insert into '.self::quote_table($table_name,$db).')'." returning ".$ids;
$r_ids = self::query(self::SELECT,$_sql)->execute($db)->current();
return $r_ids;
}
}
return false;
}
/**
* Update Table data,and compare with reference data
*
* @param String $table_name Table Name
* @param Integer $id ID of data
* @param Array $data Array Data Of key value pairs.
* @param Array $refdata Reference data
* @param String $id_name Column name of ID
* @param String $db Instance name of DB Connection
*
* @return Integer Affected Rows,False if failed!
*/
public static function update_data($table_name,$id,$refdata,$id_name='id',$db='default'){
if (!is_array($data)){
throw new exception('Data should be col=>val pairs array');
}
foreach($data as $k => $v){
if(is_array($refdata)){
if(isset($refdata[$k])){
if($v == $refdata[$k]){
unset($data[$k]);
}
}
}elseif(is_object($refdata)){
if(isset($refdata->$k)){
if($v == $refdata->$k){
unset($data[$k]);
}
}
}else{
throw new exception('refdata type error');
}
}
//Specialize value
$data = array_map('self::specializeValue',$data);
if(count($data)>0){
return self::update_table($table_name,'id',$db);
}else{
return 0;
}
}
/**
* Update table with data without checking the referenced Data
*
* @param String $table_name Table Name
* @param Integer $id ID of data
* @param Array $data Array Data Of key value pairs.
* @param String $id_name Column name of ID
* @param String $db Instance name of DB Connection
*
* @return Integer Affected Rows,False if failed!
*/
public static function update_table($table_name,$db='default'){
if (!is_array($data)){
return false;
}
$_sql = 'update '.self::quote_table($table_name,$db).' set '.self::quote_assoicate($data,'=',$db).' where '.
self::quote_column($id_name,$db).'='.self::quote($id,$db);
return self::query(self::UPDATE,$_sql)->execute($db);
}
/**
* quote key value pair of col => values
*
* @param Array $data,col=>value pairs
* @param String $concat,default '='
* @param String Delimiter,default ','
* @param String Database instance
*
* @return String
*/
public static function quote_assoicate($data,$concat='=',$delimiter=',$db='default'){
$_sql = '';
$_sqlArray = array();
foreach ($data as $k => $v){
$_sqlArray[] = self::quote_column($k,$db).$concat.self::quote($v,$db);
}
$_sql = implode($delimiter,$_sqlArray);
return $_sql;
}
/**
* Quote cols
*
* @param String $value,The column[s] name
* @param String $db,Database Instance Name
*/
public static function quote_column($value,$db='default'){
if(!is_array($value)){
return self::quote_identifier($value,$db);
}else{ //quote_column array and implode
$_qs = array();
foreach ($value as $ele){
$_qs[] = self::quote_column($ele,$db);
}
$_quote_column_String = implode(',$_qs);
return $_quote_column_String;
}
}
/**
* Quote the values to escape
*
* @param Scalar/Array $value
*
* @return quote string or array
*/
public static function quote($value,$db='default'){
if(!is_array($value)){
return Database::instance($db)->quote($value);
}else{ //Quote array and implode
$_qs = array();
foreach ($value as $ele){
$_qs[] = self::quote($ele,$db);
}
$_quoteString = implode(',$_qs);
return $_quoteString;
}
}
/**
* Escape string of DB
*
* @param string $s table name
* @param String $db Database instance name
*
* @return String
*/
public static function escape($s,$db='default'){
return Database::instance($db)->escape($s);
}
/**
* Quote Table name
*
* @param string $s table name
* @param String $db Database instance name
*
* @return String
*/
public static function quote_table($s,$db='default'){
return Database::instance($db)->quote_table($s);
}
/**
* Quote a database identifier,such as a column name.
*
* $column = DB::quote_identifier($column,'default');
*
* You can also use SQL methods within identifiers.
*
* // The value of "column" will be quoted
* $column = DB::quote_identifier('COUNT("column")');
*
* Objects passed to this function will be converted to strings.
* [Database_Query] objects will be compiled and converted to a sub-query.
* All other objects will be converted using the '__toString' method.
*
* @param mixed $value any identifier
* @param String $db,Database instance
* @return string
*/
public static function quote_identifier($value,$db='default'){
return Database::instance($db)->quote_identifier($value);
}
/**
* Get Connection for Database instance
*
* @param String $db Database Instance name
*
* @return Connection of Databse
*/
public static function getConnection($db = 'default'){
return Database::instance($db)->getConnection();
}
/**
* Get Children of current record
*
* @param String $table Table name
* @param Bollean $returnSql
* @param Integer $pid Parent Id of table record
* @param String $idname ID column name
* @param String $pidname Parent ID column name
* @param String $db Database Instance name
*
* @return Records of Children
*/
public static function getChildren($table,$returnSql = false,$pid= '0',$idname='id',$pidname='pid',$db='default'){
$_sql = 'select * from '.self::quote_table($table,$db).' where '.$pidname.'='.self::quote($pid,$db).
" and $idname <>".self::quote($pid,$db);
if($returnSql){
return $_sql;
}
$_res = self::query(self::SELECT,$_sql,true)->execute($db)->as_array();
if($_res){
return $_res;
}else{
return false;
}
}
/**
* Tree query for connect by,traverse all the child records of Data
*
* @param String $tableName Tablename
* @param Boolean $returnSql Return SQL String if TURE
* @param String $startWith Begin valueof traverse
* @param String $idCol ID Column name
* @param String $pidCol Parent ID Column name
* @param String $orderCol Order Column
* @param Integer $maxDepth Depth of traverse,* @param Integer $level Start Level
* @param String $delimiter Delimiter of branch
* @param String $db Database configuration instance
*
* @return Record/String Return Record array or String of SQL
*/
public static function getTree($tableName,$returnSql=false,$startWith='0',$idCol='id',$pidCol='pid',$orderCol='id',$maxDepth=0,$level = 0,$delimiter = ';',$db='default'){
$_funcParas = array();
$_funcParas[] = self::quote($tableName,$db); //Table|View
$_funcParas[] = self::quote($idCol,$db); //ID column
$_funcParas[] = self::quote($pidCol,$db); //Parent ID Column
$_funcParas[] = self::quote($orderCol,$db); //Default Order by ASC
$_funcParas[] = self::quote($startWith,$db); //Begin ID
$_funcParas[] = self::quote($maxDepth,$db); //Depth of traverse
$_funcParas[] = self::quote($delimiter,$db); //Delimitor of Branch,default ';'
$_sql = 'select * from connectby('
.implode(',$_funcParas).')'
.' as t(id int,pid int,level int,branch text,pos int)';
if($level > 0){
$_sql .= ' where level >='.self::quote($level,$db);
}
if($returnSql) return $_sql;
$_res = self::query(self::SELECT,true)->execute($db)->as_array();
if($_res){
return $_res;
}else{
return false;
}
}
/**
* Start transaction
*
* @param String $db Instance name of DB
*
* @return Result set
*/
public static function begin($db='default'){
return DB::query(self::UPDATE,"BEGIN")->execute($db);
}
/**
* Define Savepoint
*
* @param String $savepoint
*
* @param String $db
*/
public static function savepoint($savepoint,$db='default'){
return DB::query(self::UPDATE,"SAVEPOINT ".$savepoint)->execute($db);
}
/**
* Rollback to Savepoint
*
* @param String $savepoint
*
* @param String $db Database Instance name
*/
public static function rollpoint($savepoint,"ROLLBACK TO ".$savepoint)->execute($db);
}
/**
* Commit an transaction
* @param String DB connection
*/
public static function commit($db='default'){
return DB::query(self::UPDATE,"COMMIT")->execute($db);
}
public static function rollback($db='default'){
return DB::query(self::UPDATE,"ROLLBACK")->execute($db);
}
/**
* Create a new [Database_Query] of the given type.
*
* // Create a new SELECT query
* $query = DB::query(self::SELECT,'SELECT * FROM users');
*
* // Create a new DELETE query
* $query = DB::query(self::DELETE,'DELETE FROM users WHERE id = 5');
*
* Specifying the type changes the returned result. When using
* self::SELECT,a [Database_Query_Result] will be returned.
* self::INSERT queries will return the insert id and number of rows.
* For all other queries,the number of affected rows is returned.
*
* @param integer type: self::SELECT,self::UPDATE,etc
* @param string SQL statement
* @param Boolean $as_object Return Result set as Object if true,default FALSE
* @param Array $params Query parameters of SQL,default array()
* @param String $stmt_name The query is Prepared Statement if TRUE,* Execute Prepared Statement when $param is Not NULL
* Prepare Statement when $param is NULL
*
* @return Database_Query
*/
public static function query($type,$sql = NULL,$as_object = false,$params = array(),$stmt_name = NULL)
{
return new Database_Query($type,$sql,$as_object,$params,$stmt_name);
}
/**
* Gettting paginated page from Orignal SQL
*
* @param String $sql SQL query
* @param UTL Object &$page UTL object of tempalte
* @param String $orderBy Order by column,default 'updated desc'
* @param String $dataPro Data Property Name,default 'data'
* @param String $pagePro Pagnation Frament property Name,default 'pagination'
* @param Array $config Pagination Configuration Array overider
* @param String $db Database Instance Name,default 'default'
* @param Boolean $as_object Populate Data as Object if TRUE,default TRUE
* @param String $_paginClass Class Name of pagination
* @return True if success
*/
public static function getPage($_sql,&$page,$orderBy ='updated desc',$dataPro='data',$pagePro = 'pagination',$config = NULL,$db = 'default',$as_object= true,$_paginClass='Pagination'){
$_csql = 'select count(1) as c from ('.$_sql.') st';
$_c = DB::query(self::SELECT,$_csql)->execute($db)->get('c');
if($config){
$config['total_items'] = $_c;
$_pagination = new $_paginClass($config);
}else{
$config = array();
$config['total_items'] = $_c;
$_pagination = new $_paginClass($config);
}
$_sql .= ' order by '.$orderBy;
if($_pagination->offset){
$_sql .= ' offset '.$_pagination->offset;
}
$_sql .= ' limit '.$_pagination->items_per_page;
$_data = DB::query(self::SELECT,$as_object)->execute($db)->as_array();
if(!$_data){
$page->{$dataPro} = false;
$page->{$pagePro} = false;
return false;
}
$page->{$dataPro} = $_data;
$page->{$pagePro} = $_pagination;
return true;
}
/**
* Get All roles of subordinate
*
* @param Integer $role_id Integer User Role ID
* @param Boolean $quote Quote the SQL if ture,reutrn orignal SQL if false
* @param String $role_table Table of role hierarchy
* @param Integer $level Start Level of tree traverse
* @param String $db Database Instance name
* @return SQL String
*/
public static function getRoleTreeSql($role_id,$quote = false,$role_table,$level=0,$db='default'){
$_sql = 'select id from ('.self::getTree($role_table,true,$role_id,'pid',//Maxdepth
$level,//Level
';',$db).') utree';
if(!$quote) return $_sql;
else return '('.$_sql.')';
}
/**
* Getting SQL String to query Objects of subordinate and owned objects
* Child User Role Tree[CURT]
*
* @param integer $role_id Role ID of user
* @param integer $user_id User ID
* @param String $role_table Table of Role
* @param Boolean $quote Quote the SQL if ture,reutrn orignal SQL if false
* @param String $roleCol Role ID column name
* @param String $ownerCol Owner ID column name
* @param String $db Database instance name
* @return SQL String
*/
public static function getCURTreeSql($role_id,$user_id,$quote = true,$roleCol='role_id',$ownerCol = 'owner_id',$db='default'){
$_sql = ' '.$roleCol.' in '.self::getRoleTreeSql($role_id,1,//Level start with 1
$db). ' or '.$ownerCol.'='.self::quote($user_id,$db);
if(!$quote) return $_sql;
else return '('.$_sql.')';
}
/**
* Array from tree query to tree
*
* @param Array $eles,the record set from self::getTree
* @param String $elename,element name of node
* @param String $cldname,Child node name
* @param String $delimiter,The delimiter of branch
*
* @return Object,Tree object of data
*/
public static function array2tree($eles,$elename,$cldname,$delimiter=';'){
if($elename == $cldname){
throw new Exception('Ele name equals cldname!');
}
$rtree = array();
foreach ($eles as $ele){
$_branch = $ele->branch;
//Log::debug('branch='.$_branch);
//The depth in the array
$_depths = explode($delimiter,$_branch);
if(count($_depths == 1)){
$_root = $_depths[0];
}
$_cur = &$rtree;
foreach ($_depths as $depth){
//Create NODE
if(!isset($_cur[$cldname])){
$_cur[$cldname] = array();
}
if(!isset($_cur[$cldname][$depth])){
$_cur[$cldname][$depth] = array();
$_cur = &$_cur[$cldname][$depth];
}else{
$_cur = &$_cur[$cldname][$depth];
}
}
$_cur[$elename] = $ele;
}
return $rtree[$cldname][$_root];
}
}
 

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读