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

PHP中mssql转sqlsrv:保留数组索引替代对象调用

解决方案:保留数组索引访问的SQLSRV迁移实现

没问题,要保留原代码中数组索引而非对象调用的结构非常简单,只需要替换行数据获取的函数,并指定对应的返回模式即可:

核心修改点

原来的mssql_fetch_row()返回纯索引数组,在SQLSRV扩展中对应的是sqlsrv_fetch_array()函数,并传入SQLSRV_FETCH_NUMERIC参数,这样就能得到和原代码完全一致的索引数组结构。

修改后的完整代码

$query="Select SUBJECT,NOTES from CAMPNOTIFICATION where TYPE LIKE 'message_blackboard' AND VALIDAFTER <= GETDATE() AND (VALIDUNTIL >= GETDATE() OR VALIDUNTIL IS NULL)";
//$params = array(SQLSRV_PHPTYPE_*);
$encode = array();
$query_result = sqlsrv_query($connection, $query);
if ($query_result === false){
    die(print_r( sqlsrv_errors(), true));
}
// 替换sqlsrv_fetch_object为sqlsrv_fetch_array,指定SQLSRV_FETCH_NUMERIC模式
while ($row = sqlsrv_fetch_array($query_result, SQLSRV_FETCH_NUMERIC)) {
    $encode[] = $row;
    // 回到原代码的数组索引访问方式
    $text = $row[1];
    $text = str_replace("<br />","\n",$text);
    $text = str_replace("<br>","\n",$text);
    $text = str_replace("<br/>","\n",$text);
    $text = str_replace("<p>","\n",$text);
    $text = str_replace("\r","",$text);
    $text = strip_tags($text);
    $text = str_replace("\n","<br>",$text);
    $text = str_replace("<br>\r<br>","",$text);
    $text = str_replace("<br><br>","<br>",$text);
    echo "<h2>" . $row[0] . "</h2>" . $text . "<br>";
}

补充说明

  • SQLSRV_FETCH_NUMERIC参数确保返回的数组只有数字索引,和原mssql_fetch_row()的行为完全一致;
  • 如果省略第二个参数,sqlsrv_fetch_array()默认会返回SQLSRV_FETCH_BOTH模式(同时包含数字索引和关联键名),虽然也能使用数组索引,但明确指定SQLSRV_FETCH_NUMERIC更贴合原代码逻辑,也能节省一点内存开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:44:10