我使用php 5.4和sqlsrv扩展名,我正在尝试调用此示例存储过程(NorthWind数据库):
create PROCEDURE [dbo].[GetCategories]
@CategoryID int = null
AS
SELECT * from dbo.Categories where CategoryID= IsNull(@CategoryID,CategoryID)
我正在使用这个sqlsrv_query语法:
$sql = "{ call dbo.GetCategories (?)}";
$catID=2;
$params = array($catID);
$stmt = sqlsrv_query( $conn, $sql,$params);
我想在$ params中指定参数名称和值,就像这样:
$sql = "dbo.GetCategories";
$catID=2;
$params = array("@CategoryID"=>$catID);
$stmt = sqlsrv_query( $conn, $sql,$params);
它返回此错误:参数数组中不允许使用字符串键。
我该如何解决这个问题? 感谢
答案 0 :(得分:1)
我使用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);
答案 1 :(得分:0)
您无法使用关联数组将值绑定到SQL参数。数组中的元素必须与参数的顺序相同。