Я использую 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);
Он возвращает эту ошибку: клавиши строк не допускаются в массивах параметров.
Как я могу решить эту проблему? благодаря
Я нашел это решение, используя 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);