php 数据库类

+———————————————————- * @param
mixed $where 数据 * @param string $tables数据表名 * @param string
$fields字段名 * @param string $order排序 * @param string $limit *
@param string $group * @param string $having * @param boolean $cache
是否缓存 * @param boolean $lazy 是否惰性加载 * @param boolean $lock
是否加锁 +———————————————————- *
@return ArrayObject
+———————————————————- * @throws
ThinkExecption
+———————————————————- */ public
function
find($where,$tables,$fields=’*’,$order=null,$limit=null,$group=null,$having=null,$join=null,$cache=false,$lazy=false,$lock=false)
{ if(in_array($this-getDbType(),array(‘MSSQL’,’IBASE’),true) ) {
$this-queryStr = ‘SELECT ‘.$this-parseLimit($limit)
.$this-parseFields($fields) .’ FROM ‘.$tables .$this-parseJoin($join)
.$this-parseWhere($where) .$this-parseGroup($group)
.$this-parseHaving($having) .$this-parseOrder($order); }else{
$this-queryStr = ‘SELECT ‘.$this-parseFields($fields) .’ FROM ‘.$tables
.$this-parseJoin($join) .$this-parseWhere($where)
.$this-parseGroup($group) .$this-parseHaving($having)
.$this-parseOrder($order); if(ORACLE == $this-getDbType())
if($limit[0] = 0){ if($limit[1] 0) $this-queryStr = SELECT * FROM
(.$this-queryStr.) WHERE ROWNUM = .$limit[1]; }else{ $whereClause = ;
if($limit[1] 0) $whereClause = WHERE ROWNUM = .($limit[0] +
$limit[1]); $this-queryStr = SELECT * FROM ( SELECT ROW_.*, ROWNUM
ROWNUM_ FROM ( .$this-queryStr.) ROW_ .$whereClause .) WHERE ROWNUM_
.$limit[0]; } else $this-queryStr .= $this-parseLimit($limit); }
return $this-query(”,$cache,$lazy,$lock); }

复制代码 代码如下:

DB_HOST, ‘username’ => DB_USER, ‘password’ => DB_PWD,
‘database’ => DB_NAME, ‘hostport’ => DB_PORT, ‘dbms’ =>
DB_TYPE, ‘dsn’ => DB_TYPE.”:host=”.DB_HOST.”;dbname=”.DB_NAME );
} if(empty($dbConfig[‘hostname’])) throw_exception; self::$config =
$dbConfig; if(empty(self::$config[‘params’]))
self::$config[‘params’] = array();
/*************************************华丽分隔线*******************************************/
if { $configs = self::$config; if {
$configs[‘params’][constant(‘PDO::ATTR_PERSISTENT’)] = true; } try
{ self::$link = new PDO( $configs[‘dsn’], $configs[‘username’],
$configs[‘password’],$configs[‘params’]); } catch {
throw_exception; //exit(‘连接失败:’.$e->getMessage; } if {
throw_exception; return false; } self::$link->exec(‘SET NAMES
‘.DB_CHARSET); self::$dbVersion =
self::$link->getAttribute(constant(“PDO::ATTR_SERVER_INFO”)); //
标记连接成功 self::$connected = true; // 注销数据库连接配置信息 unset; }
return self::$link; } /** * 释放查询结果 * @access function */
static function free() { self::$PDOStatement = null; }
/*********************************************************************************************************/
/* 数据库操作 */
/*********************************************************************************************************澳门新葡萄京官网首页,/
/** * 获得所有的查询数据 * @access function * @return array */
static function getAll { self::query; //返回数据集 $result =
self::$PDOStatement->fetchAll(constant; return $result; } /** *
获得一条查询结果 * @access function * @param string $sql SQL指令 *
@param integer $seek 指针位置 * @return array */ static function
getRow { self::query; // 返回数组集 $result =
self::$PDOStatement->fetch(constant,constant(‘PDO::FETCH_ORI_NEXT’));
return $result; } /** * 执行sql语句,自动判断进行查询或者执行操作 *
@access function * @param string $sql SQL指令 * @return mixed */
static function doSql { if) { return self::execute; }else { return
self::getAll; } } /** * 根据指定ID查找表中记录 * @access function *
@param integer $priId 主键ID * @param string $tables 数据表名 * @param
string $fields 字段名 * @return ArrayObject 表记录 */ static function
findById($tabName,$priId,$fields=’*’){ $sql = ‘SELECT %s FROM %s WHERE
id=%d’; return self::getRow(sprintf($sql, self::parseFields, $tabName,
$priId)); } /** * 查找记录 * @access function * @param string
$tables 数据表名 * @param mixed $where 查询条件 * @param string
$fields 字段名 * @param string $order 排序 * @param string $limit
取多少条数据 * @param string $group 分组 * @param string $having *
@param boolean $lock 是否加锁 * @return ArrayObject */ static function
find($tables,$where=””,$fields=’*’,$order=null,$limit=null,$group=null,$having=null)
{ $sql = ‘SELECT ‘.self::parseFields .’ FROM ‘.$tables .self::parseWhere
.self::parseGroup .self::parseHaving .self::parseOrder
.self::parseLimit; $dataAll = self::getAll;
if{$rlt=$dataAll[0];}else{$rlt=$dataAll;} return $rlt; } /** *
插入记录 * @access function * @param mixed $data 数据 * @param string
$table 数据表名 * @return false | integer */ static function add {
//过滤提交数据 $data=self::filterPost; foreach { if && strtolower { $val
= $val[1]; // 使用表达式 ??? }elseif { $val = self::fieldFormat;
}else{ // 去掉复合对象 continue; } $data[$key] = $val; } $fields =
array_keys; array_walk($fields, array($this, ‘addSpecialChar’));
$fieldsStr = implode; $values = array_values; $valuesStr = implode;
$sql = ‘INSERT INTO ‘.$table.’ VALUES ‘; return self::execute; } /**
* 更新记录 * @access function * @param mixed $sets 数据 * @param
string $table 数据表名 * @param string $where 更新条件 * @param string
$limit * @param string $order * @return false | integer */ static
function update($sets,$table,$where,$limit=0,$order=”) { $sets =
self::filterPost; $sql = ‘UPDATE ‘.$table.’ SET
‘.self::parseSets.self::parseWhere.self::parseOrder.self::parseLimit;
return self::execute; } /** * 保存某个字段的值 * @access function *
@param string $field 要保存的字段名 * @param string $value 字段值 *
@param string $table 数据表 * @param string $where 保存条件 * @param
boolean $asString 字段值是否为字符串 * @return void */ static function
setField($field, $value, $table, $condition=””, $asString=false) { //
如果有'(‘ 视为 SQL指令更新 否则 更新字段内容为纯字符串 if(false ===
strpos || $asString) $value = ‘”‘.$value.'”‘; $sql = ‘UPDATE ‘.$table.’
SET ‘.$field.’=’.$value.self::parseWhere; return self::execute; } /**
* 删除记录 * @access function * @param mixed $where
为条件Map、Array或者String * @param string $table 数据表名 * @param
string $limit * @param string $order * @return false | integer */
static function remove($where,$table,$limit=”,$order=”) { $sql =
‘DELETE FROM
‘.$table.self::parseWhere.self::parseOrder.self::parseLimit; return
self::execute; } /**
+———————————————————- *
修改或保存数据 * 有主键ID则为修改,无主键ID则为增加 * 修改记录:
+———————————————————- * @access
function +———————————————————- *
@param $tabName 表名 * @param $aPost 提交表单的 $_POST * @param
$priId 主键ID * @param $aNot 要排除的一个字段或数组 * @param $aCustom
自定义的一个数组,附加到数据库中保存 * @param $isExits 是否已经存在
存在:true, 不存在:false
+———————————————————- * @return
Boolean 修改或保存是否成功
+———————————————————- */ static
function saveOrUpdate($tabName, $aPost, $priId=””, $aNot=””,
$aCustom=””, $isExits=false) { if || !is_array || is_int return false;
if && !empty $aNot = array; if && is_int $aPost =
array_diff_key($aPost, array_flip; if && is_string $aPost =
array_merge; if && !$isExits) { //新增 $aPost = array_filter($aPost,
array); return self::add; } else { //修改 return self::update($aPost,
$tabName, “SHOW TABLES”)) { $result = self::getAll(); foreach ($result
as $key => $val) { $info[$key] = current; } } return $info; } /**
* 取得数据表的字段信息 * @access function * @return array */ static
function getFields { // 获取数据库联接 $link = self::$link; $sql =
“SELECT ORDINAL_POSITION ,COLUMN_NAME, COLUMN_TYPE, DATA_TYPE,
IF(ISNULL(CHARACTER_MAXIMUM_LENGTH), (NUMERIC_PRECISION +
NUMERIC_SCALE), CHARACTER_MAXIMUM_LENGTH) AS MAXCHAR, IS_NULLABLE,
COLUMN_DEFAULT, COLUMN_KEY, EXTRA, COLUMN_COMMENT FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = :tabName AND
TABLE_SCHEMA='”.DB_NAME.”‘”; self::$queryStr = sprintf; $sth =
$link->prepare; $sth->bindParam(‘:tabName’, $tableName);
$sth->execute(); $result = $sth->fetchAll(constant; $info =
array(); foreach ($result as $key => $val) {
$info[$val[‘COLUMN_NAME’]] = array( ‘postion’ =>
$val[‘ORDINAL_POSITION’], ‘name’ => $val[‘COLUMN_NAME’], ‘type’
=> $val[‘COLUMN_TYPE’], ‘d_type’ => $val[‘DATA_TYPE’],
‘length’ => $val[‘MAXCHAR’], ‘notnull’ => (strtolower == “no”),
‘default’ => $val[‘COLUMN_DEFAULT’], ‘primary’ => (strtolower
== ‘pri’), ‘autoInc’ => (strtolower == ‘auto_increment’), ‘comment’
=> $val[‘COLUMN_COMMENT’] ); } // 有错误则抛出异常
self::haveErrorThrowException(); return $info; } /** * 关闭数据库 *
@access function */ static function close() { self::$link = null; }
/** * SQL指令安全过滤 * @access function * @param string $str
SQL指令 * @return string */ static function escape_string { return
addslashes; }
/*********************************************************************************************************/
/* 内部操作方法 */
/*********************************************************************************************************/
/** * 有出错抛出异常 * @access function * @return */ static
function haveErrorThrowException() { $obj = empty ? self::$link :
self::$PDOStatement; $arrError = $obj->errorInfo(); if { //
有错误信息 //$this->rollback(); self::$error = $arrError[2]. ”

[ SQL语句 ] : “.self::$queryStr; //throw_exception; throw_exception;
return false; } //主要针对execute()方法抛出异常
ifthrow_exception(‘Query was empty

[ SQL语句 ] :’); } /** * where分析 * @access function * @param
mixed $where 查询条件 * @return string */ static function parseWhere {
$whereStr = ”; if || is_null { $whereStr = $where; } return empty?”:’
WHERE ‘.$whereStr; } /** * order分析 * @access function * @param
mixed $order 排序 * @return string */ static function parseOrder {
$orderStr = ”; if $orderStr .= ‘ ORDER BY ‘.implode; else if && !empty
$orderStr .= ‘ ORDER BY ‘.$order; return $orderStr; } /** * limit分析
* @access function * @param string $limit * @return string */ static
function parseLimit { $limitStr = ”; if { if $limitStr .= ‘ LIMIT
‘.$limit[0].’ , ‘.$limit[1].’ ‘; else $limitStr .= ‘ LIMIT
‘.$limit[0].’ ‘; } else if && !empty { $limitStr .= ‘ LIMIT ‘.$limit.’
‘; } return $limitStr; } /** * group分析 * @access function *
@param mixed $group * @return string */ static function parseGroup {
$groupStr = ”; if $groupStr .= ‘ GROUP BY ‘.implode; else if && !empty
$groupStr .= ‘ GROUP BY ‘.$group; return empty?”:$groupStr; } /** *
having分析 * @access function * @param string $having * @return
string */ static function parseHaving { $havingStr = ”; if && !empty
$havingStr .= ‘ HAVING ‘.$having; return $havingStr; } /** *
fields分析 * @access function * @param mixed $fields * @return string
*/ static function parseFields { if { array_walk($fields, array($this,
‘addSpecialChar’)); $fieldsStr = implode; }else if && !empty { if( false
=== strpos { $fields = explode; array_walk($fields, array($this,
‘addSpecialChar’)); $fieldsStr = implode; }else { $fieldsStr = $fields;
} }else $fieldsStr = ‘*’; return $fieldsStr; } /** *
sets分析,在更新数据时调用 * @access function * @param mixed $values *
@return string */ private function parseSets { $setsStr = ”; if{
foreach { $key = self::addSpecialChar; $val = self::fieldFormat;
$setsStr .= “$key = “.$val.”,”; } $setsStr = substr; }else if { $setsStr
= $sets; } return $setsStr; } /** * 字段格式化 * @access function *
@param mixed $value * @return mixed */ static function fieldFormat {
if { $value = intval; } else if { $value = floatval; }
elseif(preg_match?w*)$/i’,$value)){ //
支持在字段的值里面直接使用其它字段 // 例如 必须包含括号 $value = $value;
}else if { $value = ”’.self::escape_string.”’; } return $value; }
/** * 字段和表名添加` 符合 * 保证指令中使用关键字不出错 针对mysql
* @access function * @param mixed $value * @return mixed */ static
function addSpecialChar { if( ‘*’ == $value || false !== strpos ||
false !== strpos || false !== strpos { //如果包含* 或者 使用了sql方法
则不作处理 } elseif(false === strpos { $value = ‘`’.trim.’`’; } return
$value; } /**
+———————————————————- *
去掉空元素 +———————————————————-
* @access function
+———————————————————- * @param
mixed $value +———————————————————-
* @return mixed
+———————————————————- */ static
function removeEmpty{ return !empty; } /** * 执行查询 主要针对
SELECT, SHOW 等指令 * @access function * @param string $sql sql指令 *
@return mixed */ static function query { // 获取数据库联接 $link =
self::$link; if return false; self::$queryStr = $sql;
//释放前次的查询结果 if ( !empty ) self::free(); self::$PDOStatement =
$link->prepare; $bol = self::$PDOStatement->execute(); //
有错误则抛出异常 self::haveErrorThrowException(); return $bol; } /**
* 数据库操作方法 * @access function * @param string $sql 执行语句 *
@param boolean $lock 是否锁定 * @return void public function execute {
if $sql = $this->queryStr; return $this->_execute; }*/ /** *
执行语句 针对 INSERT, UPDATE 以及DELETE * @access function * @param
string $sql sql指令 * @return integer */ static function execute { //
获取数据库联接 $link = self::$link; if return false; self::$queryStr =
$sql; //释放前次的查询结果 if ( !empty ) self::free(); $result =
$link->exec; // 有错误则抛出异常 self::haveErrorThrowException(); if
{ return false; } else { self::$numRows = $result; self::$lastInsertId =
$link->lastInsertId(); return self::$numRows; } } /** *
是否为数据库更改操作 * @access private * @param string $query SQL指令
* @return boolen 如果是查询操作返回false */ static function isMainIps
{ $queryIps = ‘INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOAD DATA|SELECT
.* INTO|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK’; if
(preg_match(‘/^s*”?s+/i’, $query)) { return true; } return false;
} /** * 过滤POST提交数据 * @access private * @param mixed $data
POST提交数据 * @param string $table 数据表名 * @return mixed $newdata
*/ static function filterPost { $table_column = self::getFields;
$newdata=array(); foreach ($table_column as $key=>$val){
if(array_key_exists && { $newdata[$key] = $data[$key]; } } return
$newdata; } /** * 启动事务 * @access function * @return void */
static function startTrans() { //数据rollback 支持 $link = self::$link;
if return false; if (self::$transTimes == 0) {
$link->beginTransaction(); } self::$transTimes++; return ; } /** *
用于非自动提交状态下面的查询提交 * @access function * @return boolen
*/ static function commit() { $link = self::$link; if return false; if
(self::$transTimes > 0) { $result = $link->commit();
self::$transTimes = 0; if{ throw_exception; return false; } } return
true; } /** * 事务回滚 * @access function * @return boolen */
public function rollback() { $link = self::$link; if return false; if
(self::$transTimes > 0) { $result = $link->rollback();
self::$transTimes = 0; if{ throw_exception; return false; } } return
true; } } ?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注