PHP读取MSSQL数据:mssql_fetch系列函数对比与使用场景

向北走
向北走
发布时间:2026-10-15| 3人浏览过
原创

在PHP旧版扩展中,从MSSQL结果集中提取数据通常依赖 mssql_fetch 系列函数。这些函数虽然功能相似,但返回的数据结构截然不同:mssql_fetch_row 返回数字索引数组,mssql_fetch_assoc 返回关联数组,mssql_fetch_array 同时包含两者,而 mssql_fetch_object 则返回对象。正确选择函数可避免索引错位或属性访问错误。

核心结论与适用场景

在处理数据库查询结果时,选择合适的提取函数能显著减少代码逻辑复杂度:

  • 仅关注列顺序:使用 mssql_fetch_row,性能略优但可读性差。
  • 强调语义化访问:使用 mssql_fetch_assoc,直接通过字段名获取值,推荐用于现代业务逻辑。
  • 兼容性与灵活性并存:使用 mssql_fetch_array,默认同时提供数字键和字符键。
  • 面向对象风格:使用 mssql_fetch_object,以对象属性的形式访问数据。

详细对比与代码演示

第1步:使用 mssql_fetch_row(数字索引)

目的:快速获取结果集中的行数据,并通过0开始的数字下标访问每一列。
入口:执行SQL查询后得到的结果标识符。
动作:循环调用该函数,每次返回一个包含该行所有字段的数组。

require 'dbconn.php';
$sql = 'select * from _Test';
$query = mssql_query($sql);
while($row = mssql_fetch_row($query)) {
    // 注意:必须使用数字索引,如 $row[0]
    // 使用字段名如 $row['UserId'] 会报错
    echo $row[0].'::'.$row[1].'
'; }

结果分析:该函数等同于 mssql_fetch_array($query, MYSQL_NUM)。若尝试使用 $row['ColumnName'] 访问,将触发 Notice: Undefined index 警告。它只返回数值索引,忽略字段名。

第2步:使用 mssql_fetch_assoc(关联索引)

目的:通过字段名称直接获取对应的单元格值,提高代码可读性。
入口:查询结果标识符。
动作:返回关联数组。

$query = mssql_query($sql);
while($row = mssql_fetch_assoc($query)) {
    // 可以使用字段名访问
    echo $row['UserId'].'::'.$row['CreateTime']."
"; // 尝试使用数字索引 $row[0] 将触发 Notice: Undefined offset }

结果分析:该函数等同于 mssql_fetch_array($query, MYSQL_ASSOC)。它仅返回关联数组(Key为字段名),因此不能使用 $row[1] 这样的数字偏移量取值。

第3步:使用 mssql_fetch_array(混合索引)

目的:需要同时通过字段名和数字索引访问数据,或兼容旧代码时使用。
参数说明:第二个参数 result_type 可选值为 MYSQL_ASSOC、MYSQL_NUM 或 MYSQL_BOTH(默认)。

$query = mssql_query($sql);
while($row = mssql_fetch_array($query)) {
    // 两种方式均可正常工作
    echo $row['UserId'].'::'.$row[1].'
'; }

结果分析:mssql_fetch_array 是前两者的超集。在不指定第二个参数时,它默认返回包含两种索引的数组。这也是为什么它可以替代 fetch_row 和 fetch_assoc 的原因,但内存占用略高。

第4步:使用 mssql_fetch_object(对象格式)

目的:以面向对象的方式处理数据,使代码更符合OOP规范。
动作:返回一个对象,字段名成为对象的属性。

$query = mssql_query($sql);
while($row = mssql_fetch_object($query)) {
    // 使用箭头运算符访问属性
    echo $row->UserId.'::'.$row->CreateTime."
"; }

结果分析:与 mssql_fetch_array 类似,但它返回的是 stdClass 对象。只能通过属性名(如 $row->Field)访问,无法使用 $row[0] 或 $row['Field']。

总结

尽管上述 mssql_* 系列函数在较新的PHP版本中已被废弃并建议迁移至 sqlsrv 或 PDO,但在维护旧系统或特定环境中,理解其差异依然重要。简而言之:追求清晰用 assoc,追求便捷或兼容用 array,纯数字序列用 row,面向对象用 object。以上就是PHP中mssql_fetch系列函数读取数据的区别的详细内容,更多关于PHP数据库操作与历史扩展的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。