首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP MSSQL 查詢結果獲取函數對比:mssql_fetch_row/array/assoc/object 返回結構差異詳解

     編輯:PHP 綜合知識

測試環境

表 _Test:欄位 UserId (int)、UserName (varchar)、CreateTime (datetime)。數據 5 行。

四個函數對比

1. mssql_fetch_row() → 數字索引數組

<?php
while ($row = mssql_fetch_row($query)) {
    echo $row['UserId'] . '::' . $row[1] . '<br>';
}
// 報錯: Notice: Undefined index: UserId
// 輸出: ::王小一 ::王小二 ...

特點:僅返回數字索引(0 起),無法用字段名訪問。等同 mssql_fetch_array($query, MSSQL_NUM)。

2. mssql_fetch_assoc() → 關聯索引數組

<?php
while ($row = mssql_fetch_assoc($query)) {
    echo $row['UserId'] . '::' . $row[1] . '<br>';
}
// 報錯: Notice: Undefined offset: 1
// 輸出: 1:: 2:: 3:: ...

特點:僅返回關聯索引(字段名),無法用數字索引訪問。等同 mssql_fetch_array($query, MSSQL_ASSOC)。

3. mssql_fetch_array() → 雙重索引(默認)

<?php
while ($row = mssql_fetch_array($query)) {
    echo $row['UserId'] . '::' . $row[1] . '<br>';
}
// 正常輸出: 1::王小一 2::王小二 ...

特點:同時包含數字索引和關聯索引,**最靈活**。可選第二參數:MSSQL_NUM、MSSQL_ASSOC、MSSQL_BOTH(默認)。

4. mssql_fetch_object() → 對象

<?php
while ($row = mssql_fetch_object($query)) {
    echo $row->UserId . '::' . $row->CreateTime . '<br>';
}
// 輸出: 1::06 7 2011 4:46PM ...

特點:返回 stdClass 對象,字段名作為屬性,**只能用 -> 訪問**,不支持數組語法。

對比總結表

函數返回類型字段名訪問數字索引訪問對象語法內存佔用推薦場景
mssql_fetch_row數組❌✅❌最低只需順序讀取、極大結果集節省內存
mssql_fetch_assoc數組✅❌❌中語義清晰、不需數字索引
mssql_fetch_array數組✅✅❌最高 (雙份)通用、需兼容兩種訪問
mssql_fetch_object對象✅ (屬性)❌✅中面向對象風格、配合屬性訪問

現代化遷移建議

mssql_* 函數已移除 (PHP 7.0+),諷使用:

  • PDO_SQLSRV (Microsoft 官方驅動):$stmt->fetch(PDO::FETCH_ASSOC) 等模式對應上述行為。
  • sqlsrv_* 過程化擴展:sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)。
  • PDO 統一代碼庫,支持多數據庫遷移。

PDO 模式對應表

PDO Fetch Mode對應舊函數返回結構
PDO::FETCH_NUMmssql_fetch_row數字索引數組
PDO::FETCH_ASSOCmssql_fetch_assoc關聯索引數組
PDO::FETCH_BOTHmssql_fetch_array雙重索引數組
PDO::FETCH_OBJmssql_fetch_objectstdClass 對象
PDO::FETCH_CLASS-映射到自定義類
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved