我正在将一些旧版 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 编码人员的任何实际帮助将不胜感激(包括最佳实践)。
出现“sqlsrv_num_rows() Expectsparameter 1 to be resource, bool给定”错误的原因是该语句没有正确执行。这可能是一个打字错误(
exec dbo.usp_QueryContacts ...;
,而不是exec.dbo.usp_QueryContacts ...;
),但您需要考虑以下事项:
sqlsrv_query()
通话的结果。下面的示例(基于您的代码)是您问题的可能解决方案:
<?php
$SQLStmt = "exec dbo.usp_QueryContacts NULL, ?, NULL;";
$SQLPrms = array($parm1);
$RS_Contact01 = sqlsrv_query($conn01, $SQLStmt, $SQLPrms);
if ($RS_Contact01 === false) {
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
}
if (sqlsrv_has_rows($RS_Contact01) === false) {
?>
<p>There are currently no contacts on record for this Site.</p>
<?php
} else {
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
}
}
?>