如何使用PHP展示SQL Server数据库表中的数据
问题原因
- 调用了不存在的方法:sqlsrv扩展没有
sqlsrv_fetch_assoc()函数,取关联数组需要用sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC) - 行数统计逻辑无效:
sqlsrv_num_rows()默认仅支持可滚动游标返回的结果集,默认查询用的前向游标调用该方法只会返回false,判断逻辑永远不成立 - 缺少查询执行错误校验:
sqlsrv_query()执行失败不会直接抛出错误,没有校验该步骤的返回值,无法定位查询语法、权限、表不存在等问题
修复方案
替换原有PHP代码段为如下内容即可,同时支持任意表查询测试,只需修改$query变量中的SQL语句:
<?php $serverName = "###"; // 填写实际的服务器地址\实例名,比如192.168.1.100\SQLEXPRESS $connectionInfo = array( "Database"=>"UTRBDMSNET", "UID"=>"###", "PWD"=>"###"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ) { echo "Connection established.<br />"; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); } $query = "SELECT * FROM Facility;"; // 执行查询并增加错误判断 $result = sqlsrv_query($conn, $query); if ($result === false) { die("查询执行失败:".print_r(sqlsrv_errors(), true)); } // 直接循环遍历结果集,不需要提前统计行数 while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { // 输出整行数据方便调试,也可以单独取指定字段 print_r($row); echo "<br>"; // 如果要取Operator字段可以用 $row['Operator'],注意字段名大小写和数据库一致 } // 释放资源关闭连接 sqlsrv_free_stmt($result); sqlsrv_close($conn); ?>
额外校验项
- 确认数据库账号对
Facility表有SELECT查询权限 - 确认表名、字段名拼写正确,SQL Server对大小写敏感的实例会区分大小写
- 如果还是无数据输出,可以先在SQL Server客户端执行
SELECT count(*) FROM Facility确认该表确实有数据
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

