PHP读取MSSQL数据:mssql_fetch系列函数对比与使用场景
在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数据库操作与历史扩展的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









