亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

針對thinkPHP5框架存儲過程bug重寫的存儲過程擴展類完整實例

2024-05-05 00:04:16
字體:
來源:轉載
供稿:網友

本文實例講述了針對thinkPHP5框架存儲過程bug重寫的存儲過程擴展類。分享給大家供大家參考,具體如下:

近期用tp5框架調取存儲過程發現有bug,借鑒了一些官方的函數、以及找了個mysqli的類把存儲過程重新寫了個擴展類,下面兩個類直接放置項目extend目錄的stored(這個文件夾名稱請按個人習慣命名)目錄下,需要注意的是類增加命名空間namespace stored就OK。

1、mysqli類,此類直接在網上找的,新增一個getAllData()的函數來獲取存儲過程多條數據集

<?phpnamespace stored;/*掌握滿足單例模式的必要條件(1)私有的構造方法-為了防止在類外使用new關鍵字實例化對象(2)私有的成員屬性-為了防止在類外引入這個存放對象的屬性(3)私有的克隆方法-為了防止在類外通過clone成生另一個對象(4)公有的靜態方法-為了讓用戶進行實例化對象的操作*/class mysqli{  //私有的屬性  private static $dbcon=false;  private $host;  private $port;  private $user;  private $pass;  private $db;  private $charset;  private $link;  //私有的構造方法  protected function __construct($config=array()){    header('content-type:text/html;charset=utf-8');    $this->host = $config['hostname'] ? $config['hostname'] : 'localhost';    $this->port = $config['hostport'] ? $config['hostport'] : '3306';    $this->user = $config['username'] ? $config['username'] : 'root';    $this->pass = $config['password'] ? $config['password'] : 'root';    $this->db = $config['database'] ? $config['database'] : 'zhijian';    $this->charset=isset($config['charset']) ? $config['charset'] : 'utf8';    //連接數據庫    $this->db_connect();    //選擇數據庫    $this->db_usedb();    //設置字符集    $this->db_charset();  }  //連接數據庫  private function db_connect(){    $this->link=mysqli_connect($this->host,$this->user,$this->pass);    if(!$this->link){      echo "數據庫連接失敗<br>";      echo "錯誤編碼".mysqli_errno($this->link)."<br>";      echo "錯誤信息".mysqli_error($this->link)."<br>";      exit;    }  }  //設置字符集  private function db_charset(){    mysqli_query($this->link,"set names {$this->charset}");  }  //選擇數據庫  private function db_usedb(){    mysqli_query($this->link,"use {$this->db}");  }  //私有的克隆  private function __clone(){    die('clone is not allowed');  }  //公用的靜態方法  public static function getIntance(){    if(self::$dbcon==false){      self::$dbcon=new self;    }    return self::$dbcon;  }  //執行sql語句的方法  public function query($sql){    $res=mysqli_query($this->link,$sql);    if(!$res){      echo "sql語句執行失敗<br>";      echo "錯誤編碼是".mysqli_errno($this->link)."<br>";      echo "錯誤信息是".mysqli_error($this->link)."<br>";    }    return $res;  }  //打印數據  public function p($arr){    echo "<pre>";    print_r($arr);    echo "</pre>";  }  public function v($arr){    echo "<pre>";    var_dump($arr);    echo "</pre>";  }  //獲得最后一條記錄id  public function getInsertid(){    return mysqli_insert_id($this->link);  }  /**   * 查詢某個字段   * @param   * @return string or int   */  public function getOne($sql){    $query=$this->query($sql);    return mysqli_free_result($query);  }  //獲取一行記錄,return array 一維數組  public function getRow($sql,$type="assoc"){    $query=$this->query($sql);    if(!in_array($type,array("assoc",'array',"row"))){      die("mysqli_query error");    }    $funcname="mysqli_fetch_".$type;    return $funcname($query);  }  //獲取一條記錄,前置條件通過資源獲取一條記錄  public function getFormSource($query,$type="assoc"){    if(!in_array($type,array("assoc","array","row")))    {      die("mysqli_query error");    }    $funcname="mysqli_fetch_".$type;    return $funcname($query);  }  //獲取多條數據,二維數組  public function getAll($sql){    $query=$this->query($sql);    $list=array();    while ($r=$this->getFormSource($query,"row")) {      $list[]=$r;    }    return $list;  }  /**   * 定義添加數據的方法   * @param string $table 表名   * @param string orarray $data [數據]   * @return int 最新添加的id   */  public function insert($table,$data){    //遍歷數組,得到每一個字段和字段的值    $key_str='';    $v_str='';    foreach($data as $key=>$v){      if(empty($v)){        die("error");      }      //$key的值是每一個字段s一個字段所對應的值      $key_str.=$key.',';      $v_str.="'$v',";    }    $key_str=trim($key_str,',');    $v_str=trim($v_str,',');    //判斷數據是否為空    $sql="insert into $table ($key_str) values ($v_str)";    $this->query($sql);    //返回上一次增加操做產生ID值    return $this->getInsertid();  }  /*   * 刪除一條數據方法   * @param1 $table, $where=array('id'=>'1') 表名 條件   * @return 受影響的行數   */  public function deleteOne($table, $where){    if(is_array($where)){      foreach ($where as $key => $val) {        $condition = $key.'='.$val;      }    } else {      $condition = $where;    }    $sql = "delete from $table where $condition";    $this->query($sql);    //返回受影響的行數    return mysqli_affected_rows($this->link);  }  /*  * 刪除多條數據方法  * @param1 $table, $where 表名 條件  * @return 受影響的行數  */  public function deleteAll($table, $where){    if(is_array($where)){      foreach ($where as $key => $val) {        if(is_array($val)){          $condition = $key.' in ('.implode(',', $val) .')';        } else {          $condition = $key. '=' .$val;        }      }    } else {      $condition = $where;    }    $sql = "delete from $table where $condition";    $this->query($sql);    //返回受影響的行數    return mysqli_affected_rows($this->link);  }  /**   * [修改操作description]   * @param [type] $table [表名]   * @param [type] $data [數據]   * @param [type] $where [條件]   * @return [type]   */  public function update($table,$data,$where){    //遍歷數組,得到每一個字段和字段的值    $str='';    foreach($data as $key=>$v){      $str.="$key='$v',";    }    $str=rtrim($str,',');    //修改SQL語句    $sql="update $table set $str where $where";    $this->query($sql);    //返回受影響的行數    return mysqli_affected_rows($this->link);  }  /**   * @func: 獲取存儲過程多條數據集   * @author: bieanju   * @return: array   * @createtime: 2017-12-25   */  public function getAllData($sql){    if (mysqli_multi_query($this->link,$sql)) {      do {        if ($result = mysqli_store_result($this->link)) {          while ($row = mysqli_fetch_assoc($result)) {            $list[] = $row;          }          /*必須釋放*/          mysqli_free_result($result);        }else{          return false;        }        /*mysqli_next_result($this->link) && mysqli_more_results($this->link)*/      } while (mysqli_next_result($this->link) && mysqli_more_results($this->link));    } else {      return false;    }    return $list;  }}?>

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框架的PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国在线精品国内播放| 日韩在线www| 亚洲天堂色网站| 久久天天躁夜夜躁狠狠躁2022| 欧美精品在线极品| 欧美黄色成人网| 一区二区日韩精品| 亚洲精品资源美女情侣酒店| 日韩亚洲欧美中文在线| 深夜福利91大全| 久久久在线观看| 亚洲乱码一区二区| 国产精品日韩在线一区| 精品香蕉在线观看视频一| 欧美洲成人男女午夜视频| 国产精品91在线| 欧美成人午夜视频| 日韩精品在线免费观看| 日韩av一卡二卡| 久久99精品久久久久久琪琪| 欧美巨乳在线观看| 亚洲精品xxxx| 亚洲精品自拍视频| 国产精品大陆在线观看| 国产一区二区香蕉| 久久亚洲国产精品| 成人免费看黄网站| 91国产一区在线| 高清欧美性猛交| 91精品91久久久久久| 日本精品免费一区二区三区| 国模私拍视频一区| 亚洲男人天堂古典| 欧美性感美女h网站在线观看免费| 欧美激情视频一区二区三区不卡| 日韩av在线导航| 国产精品免费一区豆花| 中文字幕在线成人| 中文字幕在线观看亚洲| 亚州国产精品久久久| 国产91精品久久久久| 欧美电影免费在线观看| 国产精品美乳一区二区免费| 成人午夜激情免费视频| 日韩在线观看视频免费| 亚洲精品ady| 亚洲图中文字幕| 国产欧美一区二区三区视频| 日韩美女福利视频| 久久久久日韩精品久久久男男| 久久精品视频亚洲| 国产精品免费网站| 中文字幕在线看视频国产欧美在线看完整| 欧美激情性做爰免费视频| 在线一区二区日韩| 中文字幕视频一区二区在线有码| 国产一区红桃视频| 国产精品久久久久9999| 国产精品日韩欧美大师| 久久免费福利视频| 欧美成人精品三级在线观看| 亚洲毛茸茸少妇高潮呻吟| 午夜剧场成人观在线视频免费观看| 欧美日韩福利在线观看| 成人国产精品免费视频| 青青久久av北条麻妃海外网| 91精品国产91久久久久福利| 日本国产高清不卡| 97在线视频精品| 91免费福利视频| 日韩在线观看视频免费| 亚洲国产精品成人精品| 日韩美女免费视频| 成人网欧美在线视频| 欧美激情一区二区三区在线视频观看| 久久6精品影院| 亚洲精品午夜精品| 亚洲国产精品中文| 亚洲综合在线做性| 久久久久久亚洲精品不卡| 国产精品影片在线观看| 91免费在线视频网站| 欧美午夜激情在线| 亚洲夜晚福利在线观看| 91精品国产自产在线观看永久| 高清亚洲成在人网站天堂| 亚洲第一福利视频| 国内精品久久影院| 亚洲电影中文字幕| 亚洲美女在线视频| 色yeye香蕉凹凸一区二区av| 91在线观看免费| 中文字幕免费精品一区高清| 日韩av在线免播放器| 成人亚洲欧美一区二区三区| 久久久久久久久电影| 亚洲xxx自由成熟| 国产成人免费av电影| 国内精品400部情侣激情| 国产婷婷成人久久av免费高清| 视频一区视频二区国产精品| 国产成人精品电影久久久| 一区二区三区黄色| 欧美一级淫片videoshd| 久久久亚洲国产天美传媒修理工| 欧美大片在线影院| 国产精品久久久久久久久久久久久| 91精品国产777在线观看| 亚洲成人激情图| 亚洲国产精品va在看黑人| 日韩国产在线看| 欧美日韩国产成人| 日韩专区在线观看| 欧美性极品xxxx娇小| 日韩在线观看av| 亚洲精品视频二区| 久久久www成人免费精品张筱雨| 国内精品在线一区| 久久精品国产精品| 久久精品美女视频网站| 色婷婷成人综合| 国产精品视频一区国模私拍| 国产精品免费一区二区三区都可以| 不卡在线观看电视剧完整版| 久久久精品999| 国产亚洲精品久久久久久777| 亚洲精品久久视频| 国产精品一区二区三区成人| 国产午夜精品美女视频明星a级| 日韩女优人人人人射在线视频| 欧美性视频网站| 午夜精品视频网站| 在线精品视频视频中文字幕| 国内精品一区二区三区| 亚洲福利视频网站| 久久6免费高清热精品| 欧美日韩国产一区二区三区| 亚洲国产天堂久久国产91| 在线性视频日韩欧美| 1769国内精品视频在线播放| 欧美极品在线视频| 在线日韩精品视频| 美女扒开尿口让男人操亚洲视频网站| 亚洲人成啪啪网站| 久久五月天色综合| 按摩亚洲人久久| 国产精品极品美女粉嫩高清在线| 欧美激情亚洲激情| 91超碰中文字幕久久精品| 中文字幕精品久久久久| 久久久亚洲天堂| 欧美大片va欧美在线播放| 亚洲精品欧美极品| 亚洲人午夜精品免费| 日韩中文字幕在线播放| 亚洲影影院av| 欧美激情视频在线| 97成人超碰免| 中日韩美女免费视频网站在线观看| 欧美中文字幕在线| 久久九九全国免费精品观看| 日韩性生活视频| 中文日韩在线视频| 成人中心免费视频|