YY 下 sql查询封装类 不知道好不好使

<?php
class Pkg_Db_Actor {
	
	/**
	 * 读 记录集
	 */
	const MODE_READ_GETALL = 0x1001;
	
	/**
	 * 读 第一条记录
	 */
	const MODE_READ_GETROW = 0x1002;
	
	/**
	 * 读 第一条记录的第一个字段
	 */
	const MODE_READ_GETONE = 0x1003;
	
	/**
	 * 读 记录集的指定列
	 */
	const MODE_READ_GETCOL = 0x1004;
	
	/**
	 * 写 (插入) 操作
	 */
	const MODE_WRITE_INSERT = 0x2001;
	
	/**
	 * 写 (更新) 操作
	 */
	const MODE_WRITE_UPDATE = 0x2002;
	
	/**
	 * 写 (删除) 操作
	 */
	const MODE_WRITE_DELETE = 0x2002;
		
	/**
	 * 执行 读 操作
	 * 
	 * @param string $mode 模式 [MODE_READ_GETALL,MODE_READ_GETROW,MODE_READ_GETONE,MODE_READ_GETCOL]
	 * @param mixed $arguments 参数[不同模式参数不同,缺省为sql字符串]
	 * @param string $callback 查询记录集的回调处理函数
	 * @param mixed $return 处理的结果
	 * 
	 * @return void
	 */
	static function read($mode, $arguments, $callback, &$return = null){
		$dbo = Core_App::$defaultDbExecutor->getReader();
		
		$arguments = (array) $arguments;
		
		$sql = array_shift($arguments);// 缺省第一个参数是sql字符串
		
		switch ($mode){
			case self::MODE_READ_GETALL: // 如果sql里面带了limit则不能使用counter
				$limit = array_shift($arguments);
				$counter = array_shift($arguments);
				if ($counter){
					$counter_sql = "SELECT COUNT(*) FROM ( $sql ) as _count_table";					
				}else {
					$counter_sql = null;
				}
				if ($limit) $sql .= Core_DBSqlHelper::getLimitSql($limit);
				$result = $dbo->getAll($sql);
				if ($counter_sql){
					$result = array(
						'counter' => $dbo->getOne($counter_sql),
						'rows' => $result,
					);
				}				
				break;
			case self::MODE_READ_GETROW:
				$result = $dbo->getRow($sql);
				break;
			case self::MODE_READ_GETONE:
				$result = $dbo->getOne($sql);
				break;
			case self::MODE_READ_GETCOL:
				$col = (int) array_shift($arguments);
				$result = $dbo->getCol($sql,$col);
				break;
			default:
				throw new Exception("未定义的 Pkg_Db_Actor READ 模式");
		}
		
		$callback = self::callbackWraper($callback);
		$return = empty($callback) ? $result : call_user_func_array($callback,array($result));
	}
	
	/**
	 * 执行 更新/删除 操作
	 * 
	 * @param string $mode 模式 [MODE_WRITE_UPDATE,MODE_WRITE_DELETE]
	 * @param mixed $arguments 参数[不同模式参数不同,缺省为sql字符串]
	 * @param string $callback 查询结果集的回调处理函数
	 * @param mixed $return 处理的结果
	 * 
	 * @return void
	 */
	static function write($mode, $arguments, $callback, &$return = null){
		$dbo = Core_App::$defaultDbExecutor->getWriter();
		
		$arguments = (array) $arguments;		
		$sql = array_shift($arguments);// 缺省第一个参数是sql字符串
		
		$result = $dbo->execute($sql);
		
		switch ($mode){			
			case self::MODE_WRITE_INSERT: // 插入操作可选 得到主键标识
				$id = array_shift($arguments);				
				$result = $id ? $dbo->lastInsertId() : $dbo->lastQueryAffectedRows();
				break;
			case self::MODE_WRITE_UPDATE:
			case self::MODE_WRITE_DELETE:
				$result = $dbo->lastQueryAffectedRows();
				break;
			default:
				throw new Exception("未定义的 Pkg_Db_Actor WRITE 模式");
		}
		$callback = self::callbackWraper($callback);
		$return = empty($callback) ? $result : call_user_func_array($callback,array($result));
	}
		
	/**
	 * 回调函数包装器
	 * 
	 * 如果函数是可调用的,则返回 回调函数,否则返回NULL
	 * 
	 * @param string $callback 回调函数
	 * 
	 * @return callback
	 */
	static function callbackWraper($callback){		
		if (!empty($callback)){
			if (is_callable($callback)) return $callback;// call_user_func_array($callback, $args);
			$cbInst = Core_Helper_Callback::getInstance();
			if ($cbInst->exists($callback))	return $cbInst->get($callback);
		}		
		return null;
	}
	
}

 

测试代码如下:

<?php
/**
 * 
 * @author xuxh
 */
class App_Controller_Cui_Actor_Run extends Core_Mvc_Web_Controller
{
	
	function II(array $rows){
		return array(
			'counter' => 3,
			'rows' => $rows
		);
	} 
	
	function actionIndex(){
		
//		$sql = "SELECT * FROM worksheet_order Limit 1";		
//		Pkg_Db_Actor::read(Pkg_Db_Actor::MODE_READ_GETALL ,$sql,array($this,'II'),$return);		
//		Core_AppUtils::dump($return,'Pkg_Db_Actor::MODE_READ_GETALL');
//		
//		Pkg_Db_Actor::read(Pkg_Db_Actor::MODE_READ_GETONE ,"SELECT count(*) FROM worksheet_order",NULL,$return);		
//		Core_AppUtils::dump($return,'Pkg_Db_Actor::MODE_READ_GETONE');
		
		Pkg_Db_Actor::read(Pkg_Db_Actor::MODE_READ_GETALL ,array(
			"SELECT id,sale_order_id FROM worksheet_order",array(1,3),true
		),NULL,$return);		
		Core_AppUtils::dump($return,'Pkg_Db_Actor::MODE_READ_GETALL');
		
	}
	
}

 

测试结果如下:

D:\AppServ\www\orderun\prototype\app>php rake.php q=cui.actor.run.index
Pkg_Db_Actor::MODE_READ_GETALL :
Array
(
    [counter] => 2957
    [rows] => Array
        (
            [0] => Array
                (
                    [id] => 5
                    [sale_order_id] => 5
                )

        )

)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值