浏览 1634 次
锁定老帖子 主题:YY 下 sql查询封装类 不知道好不好使
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-18
<?php class Pkg_Db_Actor { /** * 查询结果记录集 */ const MODE_SELECT_GETALL = 0x1001; /** * 查询第一条记录 */ const MODE_SELECT_GETROW = 0x1002; /** * 查询第一条记录的第一个字段 */ const MODE_SELECT_GETONE = 0x1003; /** * 查询结果集的指定列 */ const MODE_SELECT_GETCOL = 0x1004; /** * 检索数据 * * @param string $mode 模式 [MODE_SELECT_GETALL,MODE_SELECT_GETROW,MODE_SELECT_GETONE,MODE_SELECT_GETCOL] * @param mixed $arguments 参数[不同模式参数不同,缺省为sql字符串] * @param string $callback 查询结果集的回调处理函数 * @param mixed $return 处理的结果 * * @return void */ static function select($mode, $arguments, $callback, &$return = null){ $dbo = Core_App::$defaultDbExecutor->getReader(); $arguments = (array) $arguments; $sql = array_shift($arguments);// 缺省第一个参数是sql字符串 switch ($mode){ case self::MODE_SELECT_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_SELECT_GETROW: $result = $dbo->getRow($sql); break; case self::MODE_SELECT_GETONE: $result = $dbo->getOne($sql); break; case self::MODE_SELECT_GETCOL: $col = (int) array_shift($arguments); $result = $dbo->getCol($sql,$col); break; default: throw new Exception("未定义的 Pkg_Db_Actor SELECT 模式"); } $callback = self::callbackWraper($callback); $return = empty($callback) ? $result : call_user_func_array($callback,array($result)); } 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::select(Pkg_Db_Actor::MODE_SELECT_GETALL ,$sql,array($this,'II'),$return); // Core_AppUtils::dump($return,'Pkg_Db_Actor::MODE_SELECT_GETALL'); // // Pkg_Db_Actor::select(Pkg_Db_Actor::MODE_SELECT_GETONE ,"SELECT count(*) FROM worksheet_order",NULL,$return); // Core_AppUtils::dump($return,'Pkg_Db_Actor::MODE_SELECT_GETONE'); Pkg_Db_Actor::select(Pkg_Db_Actor::MODE_SELECT_GETALL ,array( "SELECT id,sale_order_id FROM worksheet_order",array(1,3),true ),NULL,$return); Core_AppUtils::dump($return,'Pkg_Db_Actor::MODE_SELECT_GETALL'); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |