這篇文章主要介紹了PHP基於PDO呼叫sqlserver預存程序通用方法,結合實例形式分析了基於Yii框架採用pdo呼叫sqlserver預存程序的相關操作步驟與實作技巧,需要的朋友可以參考下
本文實例敘述了PHP基於PDO呼叫sqlserver預存程序的方法。分享給大家供大家參考,具體如下:
由於業務這邊預存程序一直在sqlserver上面,所以要用php去呼叫它,然而我們本地的是windows,而線上又是linux,一開始使用Yii框架的一些機制去呼叫發現在本地一直都是好的然而到線上就不行了,找了很多方案,最後找到了pdo這種方案,而本地使用的驅動是sqlsrv線上就不行了,找了很多方案,最後找到了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基於Yii框架使用PDO呼叫sqlserver預存程序的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!