Cet article présente principalement la méthode générale d'appel de procédures stockées sqlserver par PHP basée sur PDO, et analyse les étapes de fonctionnement pertinentes et les techniques de mise en œuvre de l'utilisation de pdo pour appeler des procédures stockées sqlserver basées sur le framework Yii sur la base de l'exemple Friends in need. peut s'y référer
L'exemple de cet article décrit comment PHP appelle les procédures stockées sqlserver basées sur PDO. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Étant donné que le processus stocké côté entreprise a toujours été sur sqlserver, nous devons utiliser php pour l'appeler. Cependant, notre processus local est Windows. , et celui en ligne est Linux. J'ai commencé à utiliser certains mécanismes du framework Yii pour passer des appels et j'ai constaté que c'était toujours bon localement mais pas en ligne. J'ai cherché de nombreuses solutions et j'ai finalement trouvé la solution pdo. Le pilote utilisé localement est sqlsrv. et dblib en ligne. Vous devez donc faire attention au formulaire du pilote lors de la connexion à pdo. Lors de la récupération du jeu de résultats, veuillez noter que Windows et Linux semblent être différents. Après avoir ajouté set nocount, si win récupère directement le résultat, il peut obtenir le final. Cependant, si vous le mettez sous Linux, tout est parti, dis-je avec colère, autant les prendre tous à la fin
Partagez une méthode après l'avoir triée :
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; } }
Exemples d'utilisation :
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); }
La forme des variables $sql et $params est comme indiqué dans l'exemple ;
La forme de la variable $connect_info est la suivante [Parce que I Elle est utilisée sous le framework Yii, donc cette variable est directement obtenue depuis Yii pour obtenir la configuration du lien de base de données Si elle est différente, vous pouvez modifier vous-même le formulaire et le formulaire d'affectation. Ce qui est pratique dans le framework, c'est que la configuration peut être obtenue directement sous différents environnements. Vous pouvez obtenir respectivement sqlsrv et dblib, pas besoin de les modifier vous-même] :
[ 'dsn' => 'sqlsrv:Server=xxxxxxxxxx;Database=xxxxx', 'username' => 'xxxxx', 'password' => 'xxxxxxxxxxxxxxxxxxxx', 'charset' => 'utf8', ] //或 [ 'dsn' => 'dblib:host=xxxxxxxxxx;dbname=xxxxx', 'username' => 'xxxxx', 'password' => 'xxxxxxxxxxxxxxxxxxxx', 'charset' => 'utf8', ],
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!