91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP基于PDO如何調用sqlserver存儲過程

發布時間:2021-08-11 09:57:07 來源:億速云 閱讀:212 作者:小新 欄目:開發技術

這篇文章主要介紹了PHP基于PDO如何調用sqlserver存儲過程,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體如下:

由于業務這邊存儲過程一直在sqlserver上面,所以要用php去調用它,然而我們本地的是windows,而線上又是linux,一開始使用Yii框架的一些機制去調用發現在本地一直都是好的然而到線上就不行了,找了很多方案,最后找到了pdo這種方案,而本地使用的驅動是sqlsrv線上是dblib所以需要注意下鏈接pdo時的驅動形式,在取結果集的時候注意windows和linux好像有所不同,在我加上set nocount on后win若果直接取結果就可以拿到最后的,然而放到linux就沒了,氣死人的說,索性最后我把所有的都取一遍;

分享整理后的一個方法:

class StoredProcHelper
{
  private static $type = [
   'integer'=>PDO::PARAM_INT,
   'string'=>PDO::PARAM_STR,
   'null'=>PDO::PARAM_NULL,
   'boolean'=>PDO::PARAM_BOOL
  ];
  private $sql = '';//此變量在下方說明
  private $params = [];//此變量在下方說明
  private $connect_info;//此變量在下方說明
  private $pdo_connect;
  public function __construct($connect_info,$sql,$params){
    $this->sql = 'SET NOCOUNT ON;'.$sql;
    $this->params = $params;
    $this->connect_info = $connect_info;
    if(!empty($this->connect_info->dsn) && !empty($this->connect_info->username) && !empty($this->connect_info->password)){
      $this->pdo_connect = new PDO($this->connect_info->dsn,$this->connect_info->username, $this->connect_info->password);
    }
  }
  public function ExecuteProc(){
    $link = $this->pdo_connect->prepare($this->sql);
    foreach ($this->params as $key => $value){
      $link->bindParam($key,$value,self::$type[strtolower(gettype($value))]);
    }
    $link->execute();
    $i = 1;
    $res[0] = $link->fetchAll();
    while($link->nextRowset()){
      $res[$i] = $link->fetchAll();
      $i++;
    }
    return $res;
  }
}

使用舉例:

public static function Example($connect_info,$mobile){
    $sql='declare @customParam int;exec you_proc @Mobile = :mobile,@OutParam=@customParam out;select @customParam as outName;';
    $params = [
      ':mobile'=>$mobile
    ];
    $pdo = new StoredProcHelper($connect_info,$sql,$params);
    $res = $pdo->ExecuteProc();
    var_dump($res);
  }

變量$sql和$params的形式如例子中表現的;

變量$connect_info的形式如下【因為本人是在Yii框架 下使用的,所以以此變量是直接根據Yii來獲取數據庫鏈接配置來進行的,如果自己有所不同可以自行更改形式以及賦值形式,在框架中方便的是不同環境下直接獲取配置能分別獲取到是sqlsrv和dblib,不需要自行去更改】:

[
  'dsn' => 'sqlsrv:Server=xxxxxxxxxx;Database=xxxxx',
  'username' => 'xxxxx',
  'password' => 'xxxxxxxxxxxxxxxxxxxx',
  'charset' => 'utf8',
]
//或
[
  'dsn' => 'dblib:host=xxxxxxxxxx;dbname=xxxxx',
  'username' => 'xxxxx',
  'password' => 'xxxxxxxxxxxxxxxxxxxx',
  'charset' => 'utf8',
],

感謝你能夠認真閱讀完這篇文章,希望小編分享的“PHP基于PDO如何調用sqlserver存儲過程”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赞皇县| 建宁县| 肃南| 邹城市| 平定县| 平阳县| 英超| 蓝田县| 梅州市| 长宁区| 镇远县| 漠河县| 巴塘县| 兴和县| 民县| 南乐县| 毕节市| 托克托县| 峨眉山市| 大邑县| 寿宁县| 道孚县| 雷波县| 威信县| 永春县| 康保县| 龙陵县| 青岛市| 石城县| 丰宁| 汝州市| 绥化市| 佛坪县| 潍坊市| 裕民县| 恩施市| 军事| 聊城市| 延边| 锡林郭勒盟| 岑巩县|