带有命名参数的php sqlsrv_查询存储过程
我使用PHP5.4和sqlsrv扩展,并尝试调用此示例存储过程(NorthWind数据库): 我使用这个sqlsrv_查询语法:带有命名参数的php sqlsrv_查询存储过程,php,sql-server,stored-procedures,parameters,Php,Sql Server,Stored Procedures,Parameters,我使用PHP5.4和sqlsrv扩展,并尝试调用此示例存储过程(NorthWind数据库): 我使用这个sqlsrv_查询语法: $sql = "{ call dbo.GetCategories (?)}"; $catID=2; $params = array($catID); $stmt = sqlsrv_query( $conn, $sql,$params); 我想在$params中指定参数名称和值,如下所示: $sql = "dbo.GetCategories"; $catID=2; $
$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);
它返回以下错误:参数数组中不允许使用字符串键
我怎样才能解决这个问题?
谢谢我使用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);
$dbh=newpdo('sqlsrv:server=…');
$sql=“{调用dbo.GetCategories(@CategoryID=:CategoryID)}”;
$stmt=$dbh->prepare($sql);
$stmt->bindParam('CategoryID',$catID,PDO::PARAM_INT);
$stmt->execute();
$results=array();
做{
$results[]=$stmt->fetchAll();
}而($stmt->nextRowset());
回声';
echo($results[0][0]['CategoryID'].','。
$results[0][0]['CategoryName'].','。
$results[0][0][Description']);
回声';
$stmt->closeCursor();
未结算(stmt);
不能使用关联数组将值绑定到SQL参数。数组中的元素的顺序必须与参数的顺序相同
$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);