【发布时间】:2022-11-03 18:33:33
【问题描述】:
我有一个巨大的遗留存储过程,它输出一个表和 2 个变量。 这样做的原因是有时 SP 必须嵌套,并且为了避免嵌套 SP 错误,输出会以两种格式返回。
PHP v8 SQL 服务器 2017
SP的输入参数为:
ALTER PROCEDURE [dbo].[usp_QueryMileageDataFromPostcodes]
(
@Postcode1 VARCHAR(12) = NULL,
@Postcode2 VARCHAR(12) = NULL,
@Latitude1 FLOAT = NULL,
@Longitude1 FLOAT = NULL,
@Latitude2 FLOAT = NULL,
@Longitude2 FLOAT = NULL,
@OutputDistanceMiles Float = NULL OUTPUT,
@OutputDistanceKilometers Float = NULL OUTPUT
)
AS
SET NOCOUNT ON;
SET ANSI_WARNINGS OFF;
....
** processing within stored procedure **
....
SET @OutputDistanceMiles =
(
SELECT
MilesValue
FROM
@PostcodeMileage
WHERE
(Meters IS NOT NULL)
)
SET @OutputDistanceKilometers =
(
SELECT
KilometersValue
FROM
@PostcodeMileage
WHERE
(Meters IS NOT NULL)
)
SELECT
*
FROM
@PostcodeMileage
WHERE
(Meters IS NOT NULL)
我的 PHP 代码是:
$SQLStmt = "EXEC Postcodetools.dbo.usp_QueryMileageDataFromPostcodes @Postcode1='BH21 2SR',@Postcode2='HP234AB';";
$RS_Result01 = sqlsrv_query($conn01,$SQLStmt);
$ROW_test01 = sqlsrv_fetch($RS_Result01,SQLSRV_FETCH_ASSOC);
返回错误
Fatal error: Uncaught TypeError: sqlsrv_fetch(): Argument #1 ($stmt) must be of type resource, bool given in...
我进一步测试了:
$SQLStmt = "EXEC Postcodetools.dbo.usp_QueryMileageDataFromPostcodes @Postcode1='BH21 5PD',@Postcode2='HP23 4PD';";
$RS_Result01 = sqlsrv_query($conn01,$SQLStmt);
var_dump($RS_Result01);
这给了我bool(false)的结果
以这种方式运行的 sqlsrv 驱动程序和存储过程是否存在任何基本问题?
有没有办法让我获得表格输出?
【问题讨论】:
-
第一个参数缺少结束引号。
-
发现和编辑。谢谢你。但是,这是编写问题时的拼写错误,不会影响问题。
-
问题不在于
sqlsrv_fetch()。再次阅读错误消息:sqlsrv_fetch(): Argument #1 ($stmt) must be of type resource, bool given in[stead]。这意味着$RS_Result01是一个布尔值,通过阅读sqlsrv_query() documentation 可以解释:成功时返回语句资源,如果发生错误则返回 false。
标签: php sql-server