You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PDO MySQL查询转换为MS SQL并获得相同JSON结果?

如何修改MS SQL原生连接代码以匹配PDO MySQL的JSON输出结构?

你提到的PDO代码之所以会输出同时包含字段名和数字索引的JSON,是因为fetchAll()默认使用了PDO::FETCH_BOTH模式——它会把每一行数据同时以关联数组(字段名作为键)和索引数组(数字作为键)的形式返回。而MS SQL原生扩展的默认获取方式不会同时返回两种键,所以我们需要手动构建出和PDO完全一致的结构。

下面是修改后的完整代码,直接就能得到你想要的JSON结果:

$myServer = '你的SQL服务器地址';
$myUser = '用户名';
$myPass = '密码';

// 连接数据库
$con = mssql_connect($myServer, $myUser, $myPass) or die("Could not connect to database: ".mssql_get_last_message());
if($con){
    // echo "connected";
}
// 选择数据库
mssql_select_db('DB') or die('Could not select a database.');

// 执行查询
$SQL = "SELECT * FROM Details WHERE ID='2'";
$result = mssql_query($SQL);

// 先获取所有字段名,用来构建关联键
$fieldCount = mssql_num_fields($result);
$fieldNames = [];
for ($i = 0; $i < $fieldCount; $i++) {
    $fieldNames[] = mssql_field_name($result, $i);
}

// 构建和PDO FETCH_BOTH一致的结果数组
$finalResult = [];
while ($row = mssql_fetch_row($result)) {
    $combinedRow = [];
    foreach ($row as $index => $value) {
        // 添加数字索引键
        $combinedRow[$index] = $value;
        // 添加字段名键
        $combinedRow[$fieldNames[$index]] = $value;
    }
    $finalResult[] = $combinedRow;
}

// 输出JSON
$json = json_encode($finalResult);
echo $json;

// 关闭连接
mssql_free_result($result);
mssql_close($con);

关键步骤说明:

  • 获取字段名:通过mssql_num_fields()拿到字段总数,再用mssql_field_name()逐个获取每个字段的名称,存到数组里备用。
  • 合并行数据:用mssql_fetch_row()拿到纯索引数组的行数据,然后循环每一个值,同时给combinedRow添加数字索引键和对应的字段名键。
  • 输出JSON:最后把整理好的数组编码成JSON,和原PDO代码的输出结构完全一致。

这样处理后,你得到的JSON就会和PDO版本的输出一模一样——每个对象里既有"ID"、"TimeID"这类字段名键,也有"0"、"1"这类数字索引键,空值也会保留为null。

内容的提问来源于stack exchange,提问作者Dmitri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:21:07