如何实现AJAX调用PHP读取SQL Server并返回指定JSON结构
解决方法
你需要的JSON结构其实是PHP读取SQL Server结果时默认返回的混合数组格式(同时包含字段名键和数字索引键),下面一步步帮你调整代码实现需求:
关键原理
你给出的目标JSON里,每个对象既有"ID":null这类命名键,又有"0":null这类数字索引键,这正好对应mssql_fetch_array()函数默认返回的关联+索引混合数组(参数为MSSQL_BOTH),所以我们只需要正确收集结果并转成JSON即可。
修改后的完整PHP代码
<?php // 先设置响应头为JSON格式,确保AJAX能正确解析返回内容 header('Content-Type: application/json; charset=utf-8'); $myServer = '你的SQL Server地址'; $myUser = '数据库用户名'; $myPass = '数据库密码'; // 连接SQL Server $con = mssql_connect($myServer, $myUser, $myPass) or die("Could not connect to database: ".mssql_get_last_message()); if(!$con) exit; // 选择目标数据库 mssql_select_db('DB') or die('Could not select a database.'); // 执行查询语句 $SQL = "SELECT * FROM Details WHERE ID='2'"; $result = mssql_query($SQL) or die('An error occurred: ' . mssql_get_last_message()); // 初始化数组存储所有结果行 $responseData = []; // 循环读取每一行,默认返回混合数组(同时包含字段名和数字索引) while ($row = mssql_fetch_array($result)) { $responseData[] = $row; } // 释放结果集并关闭连接 mssql_free_result($result); mssql_close($con); // 转成JSON并输出 echo json_encode($responseData); ?>
重要细节说明
- 响应头设置:必须添加
header('Content-Type: application/json; charset=utf-8');,否则AJAX可能无法识别返回内容为JSON格式。 - 错误处理修正:你原代码里的
mysql_error()是MySQL的错误函数,SQL Server要使用mssql_get_last_message(),已经帮你修正。 - 结果集读取:
mssql_fetch_array()默认使用MSSQL_BOTH参数,会同时生成字段名键和数字索引键,完美匹配你需要的JSON结构。 - 扩展提示:注意
mssql扩展已在PHP 7.0及以上版本废弃,建议后续迁移到官方推荐的sqlsrv扩展,用法类似但更稳定。
内容的提问来源于stack exchange,提问作者Dmitri
相关产品推荐
相关产品推荐

