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

    xiaoxiao2022-06-30  23

    <?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 ) ) )  
    转载请注明原文地址: https://ju.6miu.com/read-1126008.html

    最新回复(0)