sqlsrv_fetch_array() 期望参数 1 是资源,在中给出的布尔值

新手上路,请多包涵

我正在尝试从我的数据库(IIS、MSSQL PHP)打印记录,但出现此错误…

警告:sqlsrv_fetch_array() 期望参数 1 是资源,布尔值在

<?php

$serverName ="name\SQLEXPRESS";
 $usr="sa";
 $pwd="pasw";
 $db="dbname";

$connectionInfo = array("UID" => $usr, "PWD" => $pwd, "Database" => $db);

$conn = sqlsrv_connect($serverName, $connectionInfo);

  $sql = "SELECT first_col, s_col, t_col,  FROM names ";
 $res = sqlsrv_query($conn,$sql);
  while ($row = sqlsrv_fetch_array($res)) {
    print(
    $row['first_col'].",".$row['s_col'].",".$row['t_col'].");

 }

sqlsrv_close( $conn);
?>

原文由 klapsius 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 396
2 个回答

您的查询失败。这会导致 sqlsrv_query() 返回 false。

您在查询中的错误是一个错误的逗号:

 $sql = "SELECT first_col, s_col, t_col,  FROM names ";
                                    ^^^^
                                    HERE

删除它,您的查询应该可以工作。

仅供参考,您不检查代码中的错误。您应该始终检查是否出现故障,如果出现故障,请获取错误消息。如果你这样做,你会很快抓住这个。

原文由 John Conde 发布,翻译遵循 CC BY-SA 3.0 许可协议

接受的答案过于本地化,对大多数来自谷歌的用户没有帮助,他们需要一个通用的答案,当一个人遇到这样的错误时该怎么办。

这个错误信息没有任何特别的意义,它只是一个症状,告诉我们查询执行失败。而我们需要从 SQL Server 获取 _实际的错误消息_。因此,每个查询都应该像这样在 PHP 中执行:

 $sql = "SELECT first_col, s_col, t_col,  FROM names";
$stmt = sqlsrv_query($conn, $sql);
if($stmt === false) {
    trigger_error(print_r(sqlsrv_errors(), true), E_USER_ERROR);
}

这里发生了什么?

  • 首先,我们检查查询结果,如果 case 等于 false ,这意味着查询失败
  • 如果是这样,我们调用 sqlsrv_errors() 它返回一个包含 SQL Server 返回的所有错误的数组
  • 然后我们使用 print_r() 将这个数组转换为字符串
  • 最后,抛出一个可以像处理任何其他错误一样处理的常规 PHP 错误

最后,失败的查询会抛出一个解释原因的 PHP 错误,因此可以阅读 SQL 服务器错误消息并立即修复它,或者谷歌此消息以获取针对其特定错误的解释/实用建议

原文由 Your Common Sense 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏