针对thinkPHP5框架存储过程bug重写的存储过程扩展(2)

<?php /** * 针对存储过程处理类 * @author: bieanju * @createtime: 2017-12-21 */ namespace stored; use think\Config; class procs extends mysqli{ public $mysqli; /* * 存储过程数据参数 * */ protected $data = []; /* * 执行语句 * */ protected $sql = ''; public function __construct($type = "mysqli"){ $config = C("存储过程库配置参数"); if($type == "mysql"){ $config = Config::get('database'); } $this->mysqli = new mysqli($config); } /** * 根据参数绑定组装最终的SQL语句 便于调试 * @access public * @param string $sql 带参数绑定的sql语句 * @param array $bind 参数绑定列表 * @return string */ private function getRealSql($sql, array $bind = []) { foreach ($bind as $key => $val) { $value = is_array($val) ? $val[0] : $val; $value = is_string($val) ? "'{$val}'" : $val; // 判断占位符 $sql = is_numeric($key) ? substr_replace($sql, $value, strpos($sql, '?'), 1) : str_replace( [':' . $key . ')', ':' . $key . ',', ':' . $key . ' '], [$value . ')', $value . ',', $value . ' '], $sql . ' '); } return rtrim($sql); } /** * @func:存储过程执行并得到数据集 * @author: bieanju * @return: boolean * @createtime: 2017-12-22 */ protected function procs(){ $procedure = in_array(strtolower(substr(trim($this->sql), 0, 4)), ['call', 'exec']); // 参数绑定 if ($procedure) { $sql = $this->getRealSql($this->sql,$this->data); return $this->mysqli->getAllData($sql); } return false; } /** * @func: 存储过程数据 * @author: bieanju * @return: array * @createtime: 2017-12-22 */ public function data($data = []) { $this->data = $data; return $this; } /** * @func: 存储过程sql * @author: bieanju * @return: array * @createtime: 2017-12-22 */ public function sql($sql = '') { $this->sql = $sql; return $this; } /** * 使用DEMO */ public function demo(){ return $this->sql("call demo(?,?,?,?,?,?)")->procs(); } } ?>

3、最终项目中使用demo:

use stored\procs; /*用use加载后第一步实例化下存储过程类*/ $this->procs = new procs("mysqli"); /*第二步调用demo方法并获取数据*/ //$data为给存储过程占位符传递的参数必须为array|[ ] $this->procs->data($data)->demo();

ok是不是调用很简单、多条存储过程的数据集就此拿到!

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/44cee7a94c3758b59ae0bd8bda0733da.html