【发布时间】:2021-02-16 20:06:42
【问题描述】:
我正在将一些旧的 HTML 表单从 ASP 转换为 PHP。数据是从 SQL Server 2017 上的存储过程中检索的。
我们使用 SP 的原因是某些查询需要表变量并使用“with CTE”来生成最终结果。
我遇到的问题是我需要检查是否返回了行,如果没有显示合适的 HTML 消息。函数sqlsrv_has_rows() 适用于标准的SELECT 语句,但不适用于SP。我被引导相信这是 SQL Native Driver 的问题,而不是 PHP。
这是一个不工作的例子。
<?php
$SQLStmt = "exec.dbo.usp_QueryContacts NULL,".$parm1.",NULL;";
$RS_Contact01 = sqlsrv_query($conn01, $SQLStmt);
if (sqlsrv_has_rows($RS_Contact01) === false) {
?>
<p>There are currently no contacts on record for this Site.</p>
<?php
}
else {
?>
<?php
while ($ROW_Contact01 = sqlsrv_fetch_array($RS_Contact01,SQLSRV_FETCH_ASSOC)) {
?>
<tr class="tablebody">
<td><?php echo($name);?></td>
<td><?php echo($ROW_Contact01['Email']);?></td>
<td><?php echo($ROW_Contact01['Phone']);?></td>
<td><?php echo($ROW_Contact01['Mobile']);?></td>
<td><a class="linkbutton shuttlegray shuttlegrayhover" href="contact-det.php?1=1&2=<?php echo($ROW_Contact01['ContactResolveId']);?>">Details</a></td>
</tr>
<?php
}
}
?>
这会引发:
'sqlsrv_num_rows() 期望参数 1 是资源,bool 给定'
警告。
我可以找到各种提到打开“SET NOCOUNT ON;”等的线程,但我正在努力寻找一个实际的解决方法/解决方案,让我能够检测何时没有返回行并采取相应的行动。
非常感谢任何对 PHP 编码新手的实际帮助(包括最佳实践)。
【问题讨论】:
-
你试过
SET NOCOUNT ON吗? -
这里有 SQL 注入的风险,你应该使用正确的参数化,而不是插值
-
大卫,我尝试的第一件事。
-
查理脸。有效点,会这样做。
标签: php sql-server sqlsrv