我正在尝试编写一个函数来从SQL Server 2008数据库中获取数据,到目前为止这个函数是:
function searchMovements($cd,$nm) {
$usr = $_SESSION['username']."A";
$hashedpass = $_SESSION['hashedpass'];
$svr = $GLOBALS["svrName"];
$db = $GLOBALS["dbName"];
$retarray = NULL;
$qry = "EXEC dbo.UDEF_DCAPP_GET_BOOKINGS @STKCODE = ?, @STKNAME = ?";
// echo("set query to ".$qry."<br>");
$connectionInfo = array( "Database"=>$db, "UID"=>$usr, "PWD"=>$hashedpass);
$conn = sqlsrv_connect( $svr, $connectionInfo);
if ($conn == false) {
sqlsrv_close($conn);
// echo("Failed to connect");
die( print_r( sqlsrv_errors(), true));
} else {
$params = array($cd,$nm);
$result = sqlsrv_query($conn, $qry,$params);
var_dump($result);
if($result == false) {
sqlsrv_close($conn);
echo("result empty");
die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC) ) {
$retarray[] = $row;
}
sqlsrv_close($conn);
return $retarray;
}
}
我真正遇到问题的部分是:
$params = array($cd,$nm);
$result = sqlsrv_query($conn, $qry,$params);
var_dump($result);
if($result == false) {
sqlsrv_close($conn);
echo("result empty");
die( print_r( sqlsrv_errors(), true) );
}
此部分不断返回result empty
。
当我var_dump
$result
变量时,我得到bool(false)
。
我尝试使用select语句,这似乎工作正常。 我在SQL服务器上运行了一个跟踪,它运行以下查询:
exec sp_executesql N'EXEC dbo.UDEF_DCAPP_GET_BOOKINGS @STKCODE = @P1, @STKNAME = @P2',N'@P1 varchar(8),@P2 varchar(max)','TESTCODE',''
从SSMS运行此行会返回我期望的结果。
文档似乎表明这应该有效,但这是sqlsvr_qry
函数的限制吗?我做错了吗?
答案 0 :(得分:0)
几天后找到答案,这是权限问题。
当我在SSMS中运行脚本时,它处于管理员权限之下,但PHP以用户身份运行。