从此不求人:自主研发一套PHP前端开发框架(18)

实现执行多条sql语句

myClass.php代码如下:

<?php 
       /**
       * 虚拟注入类实现
       */
       class myClass
       {
            var $xmlContent="";
            var $funcList = array();

            function myClass($xmlname)
            {
               $xmlurl = LKPHP_PATH.'Libary/Class/'.$xmlname.'.xml';

               $this->xmlContent = file_get_contents($xmlurl);
               $this->loadXml();
            }
            function loadXml(){
                $conf = (array)simplexml_load_string($this->xmlContent);

                foreach ($conf['func'] as $func) {
                    $this->funcList[strval($func->name)] = array(
                         'sql'=>strval($func->sql),
                         'description'=>strval($func->description),
                         'resultType'=>strval($func->resultType)
                        );
                }

            }
            function getSqlByParams($sql,$funcParams){
                if(!$funcParams || count($funcParams) === 0) return $sql;
                $index = 0;
                foreach ($funcParams as $p) {
                    $sql = str_replace('#{'.$index.'}',$p,$sql);
                    $index++;
                }
                return $sql;
            }
            function __call($funcName,$funcParams){
                //echo '执行了'.$funcName.'但是这个方法没有定义,因此本函数来接管';
                if(array_key_exists($funcName,$this->funcList)){
                    $db = load_db();
                    $sql = $this->funcList[$funcName]['sql'];
                    if(explode(';',$sql)>1){
                         $sqls = explode(';',$sql);
                         $sqlList = array();
                         foreach ($sqls as $s) {
                            $s = $this->getSqlByParams($s,$funcParams);//过滤参数
                            $s = str_replace(array('\n',PHP_EOL,'\t'),'',$s);
                            $sqlList[] = $s;
                         }
                         //这里要直接使用事务进行执行
                         return $db->execForTrac($sqlList,$this->funcList[$funcName]['resultType']);
                    }
                    $sql = $this->getSqlByParams($sql,$funcParams);
                    switch ($this->funcList[$funcName]['resultType']) {
                        case 'array':
                            return $db->execForArray($sql);
                            break;
                        case 'int':
                            return intval($db->execForOne($sql));
                        case 'string':
                            return strval($db->execForOne($sql));
                        default:
                            //默认使用返回数组的方式
                            return $db->execForArray($sql);
                            break;
                    }

                }
            }

       }
 ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值