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
相关产品推荐
相关产品推荐

