php sqlsrv_query具有命名参数的存储过程 [英] php sqlsrv_query stored procedure with naming parameters

查看:113
本文介绍了php sqlsrv_query具有命名参数的存储过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是带有sqlsrv扩展名的php 5.4,并且试图调用此示例存储过程(NorthWind数据库):

Im using php 5.4 with sqlsrv extension and I'm trying to call this sample stored procedure (NorthWind database):

create  PROCEDURE [dbo].[GetCategories] 
@CategoryID int = null
AS
SELECT * from dbo.Categories where CategoryID= IsNull(@CategoryID,CategoryID)

我正在使用这种sqlsrv_query语法:

And I'm using this sqlsrv_query syntax:

$sql = "{ call dbo.GetCategories (?)}";
$catID=2;
$params = array($catID);
$stmt = sqlsrv_query( $conn, $sql,$params);

我想在$ params中指定参数名称和值,就像这样:

I want to specify parameter name and value in $params, just like this:

$sql = "dbo.GetCategories";
$catID=2;
$params = array("@CategoryID"=>$catID);
$stmt = sqlsrv_query( $conn, $sql,$params);

它返回此错误:参数数组中不允许使用字符串键.

It return this error: String keys are not allowed in parameters arrays.

我该如何解决这个问题? 谢谢

How can i solve this problem? Thanks

推荐答案

我使用PDO找到了该解决方案:

I found this solution using PDO:

$dbh = new PDO('sqlsrv:server= ...');
$sql = "{CALL dbo.GetCategories (@CategoryID=:CategoryID)}";
$stmt = $dbh ->prepare($sql);

$stmt->bindParam('CategoryID', $catID, PDO::PARAM_INT);

$stmt->execute();

$results = array();
do {
    $results []= $stmt->fetchAll();
} while ($stmt->nextRowset());

echo '<pre>';


echo($results[0][0]['CategoryID'] . ', '.
         $results[0][0]['CategoryName'] . ', '.
         $results[0][0]['Description']);
echo '</pre>';

$stmt->closeCursor();
unset($stmt);

这篇关于php sqlsrv_query具有命名参数的存储过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆